C にあるプロジェクトのデバッグ コードを実装したいと考えています。私のプロジェクトでは、非常に多くの関数と関数呼び出しがあります。関数が呼び出されたときに、関数名とその呼び出し元名を出力するようにコードを書きたいと思います。誰でもこれを行うための手がかりを教えてもらえますか?
質問する
194 次
2 に答える
5
そこでlibunwindライブラリが役立つかもしれません。ただし、かなり遅くなり、最適化されたバイナリの場合は非常に予測できない結果になる可能性があります。
実際にこれをアプリに実装する必要がありますか? アプリケーションgdb
をいくつかのブレークポイントで十分に実行していませんか?
大きな依存関係なしにトレースを生成する別の方法は、このようなマクロでいくつかの関数呼び出しをラップすることです (非常に簡単な解決策で、もっと多くのことができます)。
#define TRACE(s) { printf("Doing %s\n", #s); s; }
于 2013-07-11T12:34:29.907 に答える
0
デバッグモードの場合に呼び出し元を表示する関数のマクロを実装できます
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEBUG_MODE
#ifdef DEBUG_MODE
int test( int , const char * ) ;
#else
int test( int ) ;
#endif
#ifdef DEBUG_MODE
int test( int n , const char * c )
{
printf("current: %s caller: %s\n" , __func__ , c ) ;
return n + 123 ;
}
#define test(n) test(n,__func__)
#else
int test( int n )
{
return n + 123 ;
}
#endif
int main(void)
{
int n = test(3) ;
printf("result: %d\n" , n ) ;
return 0;
}
于 2013-07-11T12:46:51.133 に答える