1

Microsoft Visual C++ 6.0 を使用していて、他の人のプログラムをデバッグしようとしています。printf ステートメントを使用しようとしましたが、何らかの理由で、プログラムの実行時にこれらのステートメントが画面に表示されません。fprintf を使用してこれらのステートメントをファイルに出力できますが、実行中にプログラムがクラッシュした場合、ファイルが空になるため、これは役に立ちません。

一部の出力を画面に強制するにはどうすればよいですか?

4

1 に答える 1

2

画面への出力を強制するには、以下の最初のセクションを参照してください。以下の 2 番目と 3 番目のオプションも、このようなプログラム クラッシュのデバッグに適しています。

fflush での printf の使用 (Vishal Kumar の回答の改良)

Vishal Kumar の答えは私にとってはうまくいきましたが、fflush の使用方法を見つけるために少し調査する必要がありました。意味をなさないprintfステートメントの「途中」でプログラムがクラッシュするという問題がありました。これが彼の答えの私の改良です。デバッガーの使用が難しい場合 (マルチスレッドなど)、すべての printf (または fprintf) ステートメントの後に fflush を使用できます。たとえば、次のように「コードをペッパー」します。

... // code
printf("Part 1 executed successfully");
fflush(stdout); // flushes the stdout buffer
... // further code
printf("Part 2 executed successfully");
fflush(stdout);
... // repeat as necessary

問題を特定するまで、実行して出力を観察し、出力される最後のステートメントと出力されない最初のステートメントの間にさらに print ステートメントを挿入します。

デバッガ

デバッガを使用できる場合は、上記のようにコードに出力ステートメントを追加するよりも効率的な選択ですが、デバッガに頼らざるを得ない場合もあります。

ヴァルグラインド

Linux を使用している場合 (MS Visual C++ を使用しているためそうではないと私は推測しています)、valgrind は、コードがクラッシュしている場所を確認する (およびメモリ リークを検出する) 別のオプションです。コードがデバッグ用にコンパイルされている場合、プログラムが「myProgram」と呼ばれる場合、ターミナル ウィンドウから次のように呼び出すことができます。

valgrind myProgram
于 2014-06-05T15:17:58.390 に答える