1.GDB的常用命令
调试有很多命令,从简单的文件载入、断点设置,到复杂的内存察看、信号捕捉等。
1.GDB的启动与退出
在输入gdb之后进入GDB,这是唯一一条SHELL下输入的命令,其余都是GDB内的命令。
GDB能够自动识别命令的简写,例如list可以简写为l
退出GDB使用quit即可(简写为q)
2.载入程序
载入前先要进行编译
gcc -g exc.c -o exc
在GDB启动时载入,有以下两种方法,具体命令为
gdb exc
或
file exc
3.列出源代码
程序载入后用list列出源码,命令如下
list
list默认只列出10行代码,想 往下看继续list
此外,也可以通过指定list命令列出源文件的某一部分。
4.执行程序
想运行当前被调试的程序,可使用run命令。
5.使用帮助功能
GDB的命令可以使用help命令来查看。
在help命令后输入具体的分类名,即可获得该命令的详细清单。
2.断点设置与管理
1.设置断点
断点使用break命令来设置,break后可以跟行号。
如果在断点处停止,想继续运行,可以使用continue命令,
2.查看断点信息
info break命令可以查看当前GDB的断点信息。
3.删除指定的断点
delete命令可以删除指定的断点,命令后面跟短点号,否则将删除所有断点。
4.删除指定行上的断点
clear命令可以删除指定行上的所有断点,clear命令后面跟行号,否则将报错。
5.禁用指定的断点
如果要使某个断点暂时失效,即禁用某个断点,可以使用disable命令来实现。
6.恢复指定的断点
恢复某个断点使用enable命令,用法与disable命令类似。
7.设置观察点
用watch命令,后面跟变量或表达式。
3.数据显示与变量赋值
1.显示变量或表达式的值
print命令可以显示变量或表达式的值,
也可以通过参数来设定输出的格式
p/x sum
上面的参数x表示以十六进制格式显示,其他参数如下:
t: 以二进制格式显示
o:以八进制格式显示
d:以十进制格式显示
c:以字符格式显示
f:以浮点数显示
2.自动显示变量或表达式的值
设置一些自动显示的变量或表达式,对应的命令为diaplay,使用了该命令之后,每当程序运行到断点处都会显示变量或表达式的值。
GDB还 提供 了 一些与display相关的命令,与断点管理命令类似,主要包括以下:
info display: 查看当前所有自动显示的变量或表达式
undisplay 或 delete display:删除一个自动显示的变量或表达式,命令后面跟的编号。
disable display:禁用一个自动显示的变量或表达式。
enable display:恢复一个自动显示的变量或表达式。
3.显示变量的数据类型
如果要查看变量的数据类型,可以使用whatis命令和ptype命令,命令如下:
whatis x
或
ptype sum
4.修改变量的值
在调试中,可能修改某一变量的值,以检验代码的正确性,可以使用set命令来完成。
命令格式:
set sum = 100
此外,print命令除了显示变量或表达式的值,也可以用来赋值。
print x=10
4.程序执行与函数调用
1.单步执行
可以使用step命令或next命令。
2.退出被调用的函数
step命令可以跟踪进入被调用函数的内部,但在函数内部如果想取消函数的执行,即忽略没有执行语句并立即返回,可以使用
return 命令,该命令后面可以跟变量或表达式,以作为函数的返回值。
3.执行到指定行
until命令可以使程序继续运行到指定行
4.跳转执行
jump命令,可以指定下一条语句的运行点,即修改程序的执行顺序。
5.强制调用函数
程序调试过程中,可以使用call来强制调用函数 。
5.其他常用命令
1.查看堆栈信息
GDB提供了backtrace命令(简写为bt)和frame命令
要查看当前栈帧的详细消息,可以使用info frame命令(简写为info f)
2.查看源程序信息
可以使用info source命令
3.查看寄存器