1 简介
越来越多公司开始使用Linux系统作为底层系统,如何进行代码的调试,定位问题成为了一个棘手的问题。而GDB作为该类产品的调试工具,掌握GDB调试成为一个程序员必要的技术。
2 GDB 调试命令
2.1 查看和设置状态
info args
显示Gdb调试的程序的状态信息,参数ARGS 用于指定查看的具体状态名。
set arg s
设置Gdb调试程序和GDB的状态,参数ARGS 用于指定查看的具体状态名。
show args
显示GDB自己的状态的信息,参数 args 指定查看的具体的状态名。
2.2 取得命令的帮助
help 显示GDB的命令的列表。
help class 显示指令分类class下的所有命令。
help command 显示指定命令的帮助命令。
info 显示可以用info命令查看的状态。
show 显示可以用show,命令查看的状态。
2.3 中断程序的执行 CTRL+C ,程序被中断后停在随机一个指令上。
2.4 断点
2.4.1设置断点
断点用break 来设置,通常用Sbpnum 来记录最近设置的断点数。
BREAK(b) function
BREAK(b) +offset
BREAK(b) - offset
BREAK(b) linenum
BREAK(b) filename:linenum
BREAK(b) filename:function
BREAK(b) *address
break 在选定的堆栈要执行的下一条指令设置一个断点。
break .....if cond 设置一个有条件的断点,只有满足条件才停止。
info break 查看设置的断点信息。
2.4 .2删除断点
clear 删除选定的堆栈要执行的下一条指令处设置的断点。
clear function
clear filename: function删除函数入口的断点。
clear llinenum\
clear filename : linenum 删除指定代码行的断点。
delete bnums 删除参数指定数目的断点或检查点。
2.4.3禁用断点
disable bnums
enable bnums
2.4.5 中断条件
condition bnum expression 指定expression 作为第Bnums个断点或检查点的中断条件。
condition bnum 移去第BNUM个断点或检查点的中断条件,使其变成无条件断点。
ignore bnum count 忽略 count 次第BNUMS个断点。
2.4.6 继续与单步执行
c /step/n
finish 继续运行到函数返回,并打印函数的返回值。
until(u)可避免step 在循环内的单步执行,一下就到达循环的终点。
3 查看堆栈
每次程序执行函数调用时,都会生成相应的信息,包括调用在程序中的位置,调用参数以及被调用函数的局部变量。这些信息保存在一块叫堆栈框的数据里。堆栈框分配的内存区域叫调用堆栈。
frame args 用来从一个命令移动到另一个命令堆栈框,并打印所选择的堆栈框。args 可以是堆栈框的地址,也可以是堆栈号。
3.1 查看源文件
list linenum 打印当前源文件以linenum为中心的源码。
list function 打印以函数function开头的为中心的源码
list first,last 打印从first到last的源码。
3.2 搜索源文件
forward-search regexp
search regexp
reverse-search regexp 在当前源文件里向前(后)与“regexp”匹配的规则表达式。
3.3 查看数据和内存
3.3.1 查看数据
print exp
print /f
打印格式可以以下几种:
x 用十六进制形式打印数据。
d 用带符号的十进制形式打印数据。
u 用无符号的十进制打印数据。
O 用八进制形式打印数据。
T 用二进制打印数据。
a 把值打印成地址。
C 用字符常量的形式打印整数。
f 打印浮点数值。
3.3 修改数据和内存
set *(long *)address =val;
set variable=val
未完待续,请看下集