一、程序调试:
1,静态调试
2,动态调试:“分段隔离”、“设置断点”、“跟踪打印”
二、GDB下:
1、可以使用几种方式来暂停程序:断点,观察点,捕捉点,信号,线程停止。
①设置断点:
a、b(break) + [源代码行号]/[源代码函数名]/[内存地址]/[变量]
b、b(break) ... if condition(condition可以是上述任一参数,如果condition是真,程序到达指定行或函数时停止)。
例如:在循环体中可以设置break ... if i = 100 来设置循环次数。
②删除断点:
a、delete
用法:delete + [breakpoints num]/[range]
delete可删除单个断点,也可删除一个断点的集合。
例如:delete 5、delete 1-10、将所有的断点删除: delete breakpoint 。
b、clear
用法:clear + [源代码行号][源代码函数名][文件名]
删除所在行的所有断点。
例如:clear XXX.c:5 (删除XXX第5行的断点)、clear 12 。
2、r(run)
3、当程序被暂停后,可以使用continue、next、setp来继续执行程序:
continue 执行到下一暂停点或程序结束。
next 执行下一行不进入函数内部。
setp 执行下一行进入函数内部。
4、查看数据:
a、print variable 查看变量
print *array@len 查看数组(array是数组指针,len是需要数据长度)
可以通过添加参数来设置输出格式:
/x 按十六进制格式显示变量。
/d 按十进制格式显示变量。
b、whatis 命令可以显示某个变量的类型
5、查看寄存器、内存:
a、display + [格式] [内存]/[表达式]
每当程序暂停时,显示内存或表达式内容(to display each time your program stops)
display + *array @ n (显示0~n-1的内容)
l $pc : 程序计数器
l $fp : 帧指针(当前堆栈帧)
l $sp : 栈指针
l $ps : 处理器状态
格式:/c、/i 、/x (???区别???)
GDB常用命令表
三、eclipse 下: