2017-12-18 17 views
0

私はLinuxにパフォーマンスプロファイラをまとめています。収集したスタックトレース情報を関数名にマッピングするのに問題があります。プロファイルアドレスから関数名を取得する方法は?

次のように私は現在

FILE* pipe = popen("addr2line -f -i -s -C -e <libname> <address>", "r"); 
    if (!pipe) return; 

    const size_t BUFFER_SIZE = 8192; 
    char buffer[BUFFER_SIZE]; 
    string result; 
    while (!feof(pipe)) 
    { 
    if (fgets(buffer, BUFFER_SIZE, pipe) != NULL) 
    result += buffer; 
    } 

    pclose(pipe); 

私のポスト処理コードからaddr2lineにを呼び出しています私のプロフィールは、サンプルをたくさん持っているようしかし、これはひどく遅いです。より速いaddr2lineのような他のユーティリティはありますか、私はより効率的な方法でaddr2lineを呼び出すことができますか?

答えて

0

私はaddr2lineユーティリティのソースコードを変更してこの問題を克服し、それをライブラリに変換しました。だから私は今このライブラリを私のプロファイルアナライザにロードして、それが関数であるかのように 'addr2line'を呼び出しています!

関連する問題