2009-08-13 13 views

答えて

6

どのコマンドあなたが強化していますか? nextmy_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) 
0

はい、あなたは解体してあなたの手を汚す持つかもしれません。まず、stepコマンド(略称s)を試してください。それがmy_func3()に入っていない場合は、代わりにstepiコマンド(略称si)を使用して、一度に1ステップずつ命令を実行してください。これは、関数呼び出しの引数を設定し、その後にクリーンアップするための多くの命令が存在する可能性があるため、いくつかの呼び出しを行うことがあります。関数定義は、ソースコードにある場合、あなたが知っている場合

1

一つの解決策は、その関数内でブレークポイントを置くことになります。

+0

私はこれが実際に質問に答えるとは思わない - これを行うための機能に入ることは可能です。 – ajshort

関連する問題