紫薯上的 使用 gdb 调试程序 , 试了下 , 确实可以很好加深对 递归 和程序执行的理解
程序如下:
#include<cstdio> int f(int n){ return n==0 ? 1:f(n-1)*n; } int main(){ printf("%d\n", f(5)); return 0; }
g++ -g -o uva489 uva489.cpp//生成可执行文件 ,注意必须使用-g参数,编译会加入调试信息,否则无法调试执行文件
gdb uva489.exe
(gdb) l
(gdb) b 3
Breakpoint 1 at 0x401356: file uva489.cpp, line 3.
gdb) b 4
Breakpoint 2 at 0x401375: file uva489.cpp, line 4.
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x00401356 in f(int) at uva489.cpp:3
2 breakpoint keep y 0x00401375 in f(int) at uva489.cpp:4
(gdb) d 1
(gdb) i b
Num Type Disp Enb Address What
2 breakpoint keep y 0x00401375 in f(int) at uva489.cpp:4
(gdb) r
Starting program: E:\ACM/uva489.exe
[New Thread 12868.0x271c]
[New Thread 12868.0x2a0c]
[New Thread 12868.0x109c]
Breakpoint 2, f (n=0) at uva489.cpp:4
4 }
enmmmmmm, 具体的命令不难
b 1-设置第一行断点 d 1-删除第一个断点
l - list list: 列出当前位置之后的10行代码 i b-列出所有断点
bt(backtrace):列出调用栈 n: 单步跳过 s: 单步进入
r-运行程序 p var_:打印变量值 delete breakpoints:删除所有断点;delete breakpoints id:删除编号为id的断点;disable/enable breakpoints id:禁用/启用断点
finish:执行到函数retun返回