LINE、FILE、funcなどを出力するデバッグ印刷関数を書きたいです。ひねりは、コールスタックの深さに応じてプリントアウトを自動的にインデントしたいということです。
main.c:55:main()
functions.c:33:function1()
functions.c:133:function2()
functions.c:33:function1()
functions.c:33:function1()
function1がすぐに戻り、function2がfunction1を2回呼び出す場合。
これは、関数が呼び出されるたびに手動でインクリメントされ、返されるたびにデクリメントされるグローバル変数を使用して実行できると思いますが、これにはコードベースのかなりのリホールが必要になります。もっと簡単な方法があるのだろうかと思っていました。
それが標準のGNUである限り、ソリューションが非標準のCであるかどうかは気にしません。
おそらく、Gccのコードプロファイリングオプションを使用してこれを行うことができます。https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Code-Gen-Options.html
-finstrument-functions関数
への入り口と出口のインストルメンテーション呼び出しを生成します。関数の入力直後と関数の終了直前に、現在の関数のアドレスとその呼び出しサイトを使用して、次のプロファイリング関数が呼び出されます。(一部のプラットフォームでは、__ builtin_return_addressは現在の関数を超えて機能しないため、コールサイト情報をプロファイリング関数で使用できない場合があります。)
void __cyg_profile_func_enter (void *this_fn,
void *call_site);
void __cyg_profile_func_exit (void *this_fn,
void *call_site);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加