以下のコードを実行すると実行結果になるのですが、xを全部表示して、x=1からmain() = 0に移るのですが、そこのところが分かりません。debugすると
(gdb) step
19 }
(gdb) step
main() = 0
14 v++;
(gdb) step
のところがわかりません。19行から14行にどうして行くのかが分かりません。
教えてください。お願いいたします。
コード //関数の再帰呼び出し #include <stdio.h> int main(void) { static int x=5; static int v=0; if(--x > 0){ printf("x = %d\n",x); printf("main() = %d\n",main()); v++; return (v); }else{ return (0); } } /* 実行結果 naka@naka ~/meikaicjs/chap13 $ gcc -o list13_3 list13_3.c -Wall naka@naka ~/meikaicjs/chap13 $ list13_3 x = 4 x = 3 x = 2 x = 1 main() = 0 main() = 1 main() = 2 main() = 3 naka@naka ~/meikaicjs/chap13 $ gcc -g list13_3.c -o list13_3 -Wall nakamura@nakamura ~/meikaicjs/chap13 $ gdb list13_3 GNU gdb (GDB) 7.6.1 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "mingw32". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from C:\MinGW\msys\1.0\home\nakamura\meikaicjs\chap13\list13_3.exe...done. (gdb) b main Breakpoint 1 at 0x40146e: file list13_3.c, line 10. (gdb) r Starting program: C:\MinGW\msys\1.0\home\nakamura\meikaicjs\chap13/list13_3.exe [New Thread 11688.0x1cf0] [New Thread 11688.0x1f0c] [New Thread 11688.0x11d0] [New Thread 11688.0x1528] [New Thread 11688.0xc50] [New Thread 11688.0x16b4] [New Thread 11688.0x1a88] Breakpoint 1, main () at list13_3.c:10 10 if(--x > 0){ (gdb) step 11 printf("x = %d\n",x); (gdb) step x = 4 12 printf("main() = %d\n",main()); (gdb) step main () at list13_3.c:6 6 { (gdb) step Breakpoint 1, main () at list13_3.c:10 10 if(--x > 0){ (gdb) p x $1 = 4 (gdb) step 11 printf("x = %d\n",x); (gdb) step x = 3 12 printf("main() = %d\n",main()); (gdb) step main () at list13_3.c:6 6 { (gdb) step Breakpoint 1, main () at list13_3.c:10 10 if(--x > 0){ (gdb) step 11 printf("x = %d\n",x); (gdb) step x = 2 12 printf("main() = %d\n",main()); (gdb) step main () at list13_3.c:6 6 { (gdb) step Breakpoint 1, main () at list13_3.c:10 10 if(--x > 0){ (gdb) step 11 printf("x = %d\n",x); (gdb) p x $2 = 1 (gdb) step x = 1 12 printf("main() = %d\n",main()); (gdb) step main () at list13_3.c:6 6 { (gdb) step Breakpoint 1, main () at list13_3.c:10 10 if(--x > 0){ (gdb) step [New Thread 11688.0x1b1c] 17 return (0); (gdb) step 19 } (gdb) step main() = 0 14 v++; (gdb) step 15 return (v); (gdb) step 19 } (gdb) step main() = 1 14 v++; (gdb) step 15 return (v); (gdb) step 19 } (gdb) step main() = 2 14 v++; (gdb) step 15 return (v); (gdb) step 19 } (gdb) step main() = 3 14 v++; (gdb) step 15 return (v); (gdb) step 19 } (gdb) step 0x00401288 in __register_frame_info () (gdb) Single stepping until exit from function __register_frame_info, which has no line number information. 0x0040128f in __register_frame_info () (gdb) q A debugging session is active. Inferior 1 [process 11688] will be killed. Quit anyway? (y or n) y error return ../../gdb-7.6.1/gdb/windows-nat.c:1275 was 5 naka@naka ~/meikaicjs/chap13 $ */
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/22 04:36