一般的,GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的-g参数可以做到这一点。
>cc -g hello.c -o hello
>g++ -g hello.cpp -o hello
1.break func 设置断点,在函数func()的入口处
2.info break 查看断点信息
3.p i 打印变量i的值,p是print命令的缩写
4.bt 查看函数堆栈
5.finish 退出函数
6.continue/c 碰到断点后继续运行
7.set args 可以指定程序运行时的参数。
8.show args 命令查看设置好的运行参数
9.show paths 查看程序的运行环境
10.set env varname [=value] 设置环境变量
一、设置断点
1.break filename:linenum
2.break filename:function
3.break *address
4.break ……if
break if i=100
5.info breakpoints
二、设置捕捉点 catchpoint
catch
三、维护停止点
delete、clear、disable、enable
1.clear 清除所有的已定义的停止点
2.delete [breakpoints] [range…] 删除指定的断点
3.disable [breakpoints] [range…]
4.enable [breakpoints] [range…]
四、为停止点设定运行命令
用command命令来设置停止点的运行命令
break foo if x>0
commands
printf "x is %d\n",x
continue
end
五。恢复程序运行和单步调试
1.step 单步跟踪,如果有函数调用,会进入该函数
2.next 单步跟踪,如果有函数调用,不会进入该函数
3.finish 运行程序,知道当前函数完成返回
4.until/u 运行程序知道推出循环体
六、数组
1.查看一段连续的内存地址空间的值。使用@
int *array = (int *) malloc (len*sizeof(int));
print *array@len
2.输出格式
x 十六进制格式
d 十进制
u 十六进制无符号
o 八进制
t 二进制
a 十六进制
c 字符格式
f 浮点数
print/a i
七、查看内存
examine/x
n,f,u
八、GDB环境变量$
set $foo= *object_ptr
show convenience
set $i=0
print bar[$i++]->contents
九、查看寄存器
1.info registers
2.info all-registers
3.info registers