1

C にあるプロジェクトのデバッグ コードを実装したいと考えています。私のプロジェクトでは、非常に多くの関数と関数呼び出しがあります。関数が呼び出されたときに、関数名とその呼び出し元名を出力するようにコードを書きたいと思います。誰でもこれを行うための手がかりを教えてもらえますか?

4

2 に答える 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 に答える