ユーザー空間の C99 プログラムで呼び出される関数とその順序を知りたいです。また、どのパラメータが与えられているか。
DTrace でこれを行うことはできますか?
プログラムの例
int g(int a, int b) { puts("I'm g"); }
int f(int a, int b) { g(5+a,b);g(8+b,a);}
int main() {f(5,2);f(5,3);}
次のテキストファイルが表示されます。
main(1,{"./a.out"})
f(5,2);
g(10,2);
puts("I'm g");
g(10,5);
puts("I'm g");
f(5,3);
g(10,3);
puts("I'm g");
g(11,5);
puts("I'm g");
ソースを変更したくありません。プログラムは非常に巨大で、9,000 個の関数があります。
私はすべての情報源を持っています。デバッグ情報をコンパイルしたプログラムがあり、gdb はバックトレースで関数パラメーターを出力できます。
タスクは DTrace で解決できますか?
私のOSは、BSD、Linux、MacOS、Solarisのいずれかです。私は Linux の方が好きですが、リストされている OS のどれでも使用できます。