2011-01-08 6 views
0

printf()を使用してデバッグ出力を使用していますが、出力は第1列。私は関数のネストレベルを区別したいのですが、関数に入るたびに出力文字列をインデントします(ファンクションの先頭にインクリメントされたstatic int indentlevel;変数を簡単に実装し、スペースフィラーカウントとして使用します)。最後に減少する)。しかし、この欠点は、出力ラインがコンソールエッジでラップするには長すぎると、ラインの折り返し部分がコンソールの第1列から始まるということです。出力が一旦ファイルにリダイレクトされると、行は、例えば1行の長さになり、行の幅はテキストファイルビューアの設定だけに依存するので、これに注意する必要がありますか?Cプログラムのprintf()/ fprintf()によって出力されるデバッグ文字列のインデント(およびインデント)

+0

しかし、行の幅はコンソールの設定でも設定できません。 – Cratylus

+0

コンソールウィンドウのサイズを変更しますか?画面の最大幅に制限されています。 – mbaitoff

+0

No.これは通常バッファ幅にあります。 – Cratylus

答えて

0

テキストファイルに書き込むため、行の折り返しを気にせず、テキストビューアに決定させる必要があります。

私が使ったアプローチは、HTMLに書き込むことです。ブラウザは行の折り返しを処理します。唯一の欠点は、オープンタグと終了タグが適切にバランスされていることに注意する必要があることですが、indentlevel変数にもそのタグが必要です。

1

gccを使用している場合は、-finstrument-functionsコンパイラオプションを使用して、各関数の入口と出口でインストルメンテーション関数を呼び出すことができます。

 void __cyg_profile_func_enter (void *this_fn, 
            void *call_site); 
     void __cyg_profile_func_exit (void *this_fn, 
            void *call_site); 

これらの機能を定義して、ネストレベルを追跡することができます。

警告:私は実際にこれを試したことがありません(これまで私がまだ知りませんでした!)。 1つの明白なGOTHCA - 計測機能を計測しないでください!

http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Code-Gen-Options.html

関連する問題