私は時々このような関数をデバッグしたい:my_func1(my_func2(my_func3(val)));gdbの入れ子関数呼び出しをどのように進めることができますか?
私は、GDBで、このネストされた呼び出しをステップ実行することができます方法はありますか?私はmy_func3をステップにしたい、そしてmy_func2は、その後、my_func1など
私は時々このような関数をデバッグしたい:my_func1(my_func2(my_func3(val)));gdbの入れ子関数呼び出しをどのように進めることができますか?
私は、GDBで、このネストされた呼び出しをステップ実行することができます方法はありますか?私はmy_func3をステップにしたい、そしてmy_func2は、その後、my_func1など
どのコマンドあなたが強化していますか? next
はmy_func1(my_func2(my_func3(val)));
のデバッグ時に次の行に移動しますが、step
はmy_func3と入力します。 例:デバッグさ
int my_func1(int i)
{
return i;
}
int my_func2(int i)
{
return i;
}
int my_func3(int i)
{
return i;
}
int main(void)
{
return my_func1(my_func2(my_func3(1)));
}
:
(gdb) b main
Breakpoint 1 at 0x4004a4: file c.c, line 19.
(gdb) run
Starting program: test
Breakpoint 1, main() at c.c:19
19 return my_func1(my_func2(my_func3(1)));
(gdb) step
my_func3 (i=1) at c.c:14
14 return i;
(gdb) step
15 }
(gdb) step
my_func2 (i=1) at c.c:9
9 return i;
(gdb) step
10 }
(gdb) step
my_func1 (i=1) at c.c:4
4 return i;
(gdb) step
5 }
(gdb) step
main() at c.c:20
20 }
(gdb) cont
Continuing.
Program exited with code 01.
(gdb)
はい、あなたは解体してあなたの手を汚す持つかもしれません。まず、step
コマンド(略称s
)を試してください。それがmy_func3()
に入っていない場合は、代わりにstepi
コマンド(略称si
)を使用して、一度に1ステップずつ命令を実行してください。これは、関数呼び出しの引数を設定し、その後にクリーンアップするための多くの命令が存在する可能性があるため、いくつかの呼び出しを行うことがあります。関数定義は、ソースコードにある場合、あなたが知っている場合
一つの解決策は、その関数内でブレークポイントを置くことになります。
私はこれが実際に質問に答えるとは思わない - これを行うための機能に入ることは可能です。 – ajshort