-
1.0如何使可执行程序变为可调试
gcc -g -o test test.c // -g 编译选项使test可执行程序拥有可调试属性
-
1.1如何启动gdb调试工具
a.启动gdb但不调试可执行文件:gdb
载入待调试文件:(gdb)file test
b.启动gdb并调试可执行文件:gdb test
c.其它启动方式暂不列举
-
1.2查看源程序代码
list <line-num> 显示指定行前后的代码
list <func> 显示函数代码
list 显示当前行前后的代码
list + 从当前行往后显示代码
list - 从当前行往前显示代码
list <first>,<last> 显示first行与last行之间的代码
list ,<last> 显示当前行到last行之间的代码
------ ------ ------ ------ ------ ------ ------ ------ ------ ------
扩展:
set listsize <count> 设置一次list命令显示代码的行数,默认设置显示10行
show listsize 查看当前设置listsize的值
-
1.3查看源代码的内存
info line [行号][函数名][文件名:行号][文件名:函数名]
-
1.4查看单个数据(如果编译器优化将一些变量优化掉可能导致查看不到)
print <expr> //expr可是变量名,表达式
print /<format> <expr> //关于数据的显示格式暂且不讲
使用gdb的print查看程序运行时的数据,每个print都会被gdb记录下来,以$1、$2、$3……的方式为每一print命令编号,后面可以直接使用这个编号访问以前的表达式,如print $2。这样避免的重复输入表达式。
------ ------ ------ ------ ------ ------ ------ ------ ------ ------
p file::variable 查看文件作用于变量
p function::variable 查看函数作用域变量
-
1.5修改变量的值
print x=4 将x赋值为4并打印x的值
set var width=47 将width的值设置为47
------ ------ ------ ------ ------ ------ ------ ------ ------ ------
补充:查看变量的类型
whatis varName 查看变量varName的类型
-
1.6查看连续内存空间的值
1.6.1动态分配的连续内存
int *array = (int*)malloc(…)
print *array@len 注意是"*array"格式,len表示查看元素的个数
1.6.2静态数组
print 数组名
-
1.7自动显示的变量值的相关命令。已经设置后的变量,当每执行一个调试命令后会自动显示在调试界面中。
display <expr> 设置要自动显示值的变量
display /<fmt> <expr> 设置要自动显示的变量及数据的显示格式
------ ------ ------ ------ ------ ------ ------ ------ ------
undisplay display <dnum> 删除一个自动显示变量
delete display <dnum> 删除一个自动显示变量
undisplay/delete display <dnum1~dnum5> 删除一个范围内的自动变量
------ ------ ------ ------ ------ ------ ------ ------ ------
disable/enable display <dnum> 禁用/启用一个自动显示变量
------ ------ ------ ------ ------ ------ ------ ------ ------
9.
info display 查看设置的自动显示变量
ist(l):显示代码及其行数
break(b) 行数:设置断点
r:运行程序
p 变量名:输出变量的值
c:继续
clear 行数:取消断点
quit(q):退出gdb
s:单步调试,并进入函数内部
n:单步调试,不进入函数内部
whatis 变量名:查看变量类型
bt:查看堆栈信息