実行可能ファイルでローカルに定義された関数をトレースできるltraceやstraceのようなツールを探しています。ltrace は動的ライブラリ呼び出しのみをトレースし、strace はシステム コールのみをトレースします。たとえば、次の C プログラムがあるとします。
#include <stdio.h>
int triple ( int x )
{
return 3 * x;
}
int main (void)
{
printf("%d\n", triple(10));
return 0;
}
でプログラムを実行すると、これは標準ライブラリ関数 (私のシステムでは動的ライブラリ) であるため、へltrace
の呼び出しが表示され、スタートアップ コードからのすべてのシステム コール、printf の実装に使用されるシステム コール、およびシャットダウン コードが表示されます。 、しかし、関数が呼び出されたことを示す何かが必要です。ローカル関数が最適化コンパイラによってインライン化されておらず、バイナリが削除されていない (シンボルが削除されていない) と仮定すると、これを実行できるツールはありますか?printf
strace
triple
編集
いくつかの説明:
- ツールが非ローカル関数のトレース情報も提供する場合は問題ありません。
- 特定のツールをサポートするプログラムを再コンパイルする必要はありません。実行可能ファイルのシンボル情報で十分です。
- このツールを使用して、ltrace/strace でできるように既存のプロセスにアタッチできれば、本当にうれしいです。