24

アプリケーションで呼び出されているすべての関数を一覧表示するにはどうすればよいでしょうか。GDB を使用してみましたが、そのバックトレース リストはメイン関数呼び出しまでしかありません。

より深いリスト、つまりメイン関数によって呼び出されるすべての関数のリストと、これらの呼び出された関数から呼び出される関数などのリストが必要です。

これをgdbで取得する方法はありますか? または、これを取得する方法についての提案を教えてください。

4

4 に答える 4

25

アプリケーションで呼び出されているすべての関数を一覧表示するにはどうすればよいですか

現実的なサイズのアプリケーションの場合、このリストには何千ものエントリが含まれるため、おそらく役に立たなくなります。

次のコマンドを使用して、アプリケーションで定義されている(ただし必ずしも呼び出されているとは限らない)すべての関数を見つけることができます。nm

nm /path/to/a.out | egrep ' [TW] '

GDB を使用して、各関数にブレークポイントを設定することもできます。

(gdb) set logging on     # collect trace in gdb.txt
(gdb) set confirm off    # you wouldn't want to confirm every one of them
(gdb) rbreak .           # set a breakpoint on each function

続行すると、呼び出された各関数のブレークポイントにヒットします。disableおよびcontinueコマンドを使用して、先に進みます。Python スクリプトを使用したい場合を除き、これを自動化する簡単な方法はないと思います。

すでに述べgprofた別の良いオプションです。

于 2012-03-03T20:58:52.327 に答える
10

コール グラフが必要です。使用したいツールは gdb ではなく、gprof. プログラムをコンパイルして-pg実行します。実行すると、ファイルgmon.outが生成されます。次に、このファイルを で処理しgprof、出力を楽しみます。

于 2012-03-03T20:47:57.307 に答える