スタック内の深さに応じてインデントされた関数が呼び出されたときに、gdb が対象の関数を出力するようにするにはどうすればよいですか?
私は(でっち上げ)のようなことを言えるようになりたい:
(gdb) trace Foo* Bar* printf
そして、呼び出されたときに Foo または Bar で始まるすべての関数を gdb に出力させます。gnu cflow のようなものですが、デバッグ シンボルを使用し、実際に呼び出される関数のみを表示することを除いて、可能なすべての呼び出しフローではありません。
役に立たないツールには、関数が最も頻繁に呼び出された結果を並べ替える cachegrind、callgrind、および oprofile が含まれます。呼び出す順序を保持する必要があります。
多くの Foo および Bar 関数があるため、ワイルドカード (または同等のもの) は不可欠です。私は絶対にすべての機能を記録することに落ち着きますが. または、特定のライブラリにすべての関数を記録するように gdb に指示することもできます。
一部の GDB ウィザードには、この一般的なジョブのスクリプトが必要です!