上一篇《Linux C++ 开发6 - GDB调试》中我们讲解了GDB的调试流程和常用的调试方法。GDB的调试指令众多,我们这里针对常用的指令做一个汇总(按功能分类),以便需要时进行查阅。
1. 运行命令
命令 | 缩写 | 说明 |
---|---|---|
run |
r |
运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。 |
start |
开始执行程序,停在main函数第一行语句前面等待命令。 | |
continue |
c | 继续执行,到下一个断点处(或运行结束) |
next |
n |
单步跟踪程序,当遇到函数调用时,也不进入此函数体 |
step |
s |
单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数 |
return |
结束当前调用函数并返回指定值,到上一层函数调用处停止程序执行。 | |
finish |
fi |
运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。 |
until |
(1). until : 当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。(2). until 行号 : 运行至某行,不仅仅用来跳出循环。 |
|
jump |
j |
使程序从当前要执行的代码处,直接跳转到指定位置处继续执行后续的代码。 |
call |
(1). 调用程序中可见的函数,并传递“参数”。 (2). 使用方法举例: call gdb_test(55) 。 |
|
quit |
q |
退出gdb |
2. 设置断点
命令 | 缩写 | 说明 |
---|---|---|
break n |
b n |
在第n行处设置断点。 |
break filename:n |
b filename:n |
(1). 在filename 的第n行 设置断点。(2). 举例: b company.cpp:578 |
break func |
b func |
(1). 在函数func()的入口处设置断点。 (2). 举例: break cb_button |
break filename:func |
b filename:func |
(1). 在filename 的func函数 处设置断点。(2). 举例: b Department.hpp:Department::GetPerson ;表示在 Department.hpp 的Department 类的GetPerson 成员函数设置断点。 |
info breakpoints |
info b i b |
显示所有断点设置情况 |
disable n |
禁用第n个断点 | |
enable n |
启用第n个断点 | |
delete n |
d n |
删除第n个断点 |
clear n |
清除第n行的断点 | |
delete breakpoints |
d breakpoints |
清除所有断点 |
3. 查看源码
命令 | 缩写 | 说明 |
---|---|---|
list |
l |
列出程序的源代码,默认每次显示10行。 |
list n |
l n |
列出当前文件以“第n行”为中心的前后10行代码,如:list 12 |
list +n |
l +n |
显示距当前所在行后n行处的源程序。 |
list -n |
l -n |
显示距当前所在行前n行处的源程序。 |
list func |
l func |
显示func函数 所在位置的源代码,如:list main |
list |
l |
不带参数,将接着上一次 list 命令的,输出下边的内容。 |
list . |
l . |
列出当前所在文件开始位置的代码。 |
list filename:n |
l filename:n |
列出filename文件第n行位置的代码,如:l Department.hpp:30 |
4. 打印表达式
命令 | 缩写 | 说明 |
---|---|---|
print a |
p a |
打印变量a 的值。 |
print ++a |
p ++a |
将把a 中的值加1,并打印出来。 |
print add(2, 3) |
p add(2, 3) |
调用函数add ,并传递参数(2, 3) ,打印函数执行结果。 |
print add(a, b) |
p add(a, b) |
调用函数add ,并将变量a 、b 传递给函数(a, b) ,打印函数执行结果。 |
display expression |
每次程序暂停时显示指定表达式(expression )的值。 |
|
watch expression |
设置一个监视点,一旦被监视的表达式(expression )的值改变,gdb将强行终止正在被调试的程序。如: watch a 。 |
|
whatis |
查询变量或函数,如:whatis add ; whatis a 。 |
|
info function |
列出函数列表。 | |
info locals |
打印当前堆栈页的所有变量。 |
5. 查看运行信息
命令 | 缩写 | 说明 |
---|---|---|
backtrace |
bt |
显示当前调用堆栈。 |
where /info stack |
bt 的功能完全相同, 显示当前调用堆栈。 |
|
up |
在调用堆栈中向上移动,即切换到调用当前函数的上一层堆栈帧。 | |
down |
在调用堆栈中向下移动,即切换到被当前函数调用的下一层堆栈帧。 | |
frame n |
f n |
选择当前堆栈的第n帧。 |
set args |
用于设置程序运行时的参数。这些参数将传递给程序的 main 函数,类似于在命令行中运行程序时传递的参数。参见下面的Demo。 | |
show args |
用于查看当前设置的程序运行时参数。这些参数将传递给程序的 main 函数,类似于在命令行中运行程序时传递的参数。 | |
info program |
来查看程序的是否在运行,进程号,被暂停的原因。 |
5.1. 设置和查看运行参数的Demo
demo03.cpp:
1 |
|
编译demo03.cpp:
1 | g++ -g ./demo03.cpp -o ./demo03.out |
调试并运行:
1 | gdb -q ./demo03.out |
上面这种通过set args
的方式设置参数,与下面这种通过--args
的方式是一样的。
1 | # 也可以使用 --args 选项来设置参数 |
6. 分割窗口
layout
指令用于分割窗口,可以一边查看代码,一边调试。
命令 | 说明 |
---|---|
layout src |
显示源代码窗口。 |
layout asm |
显示反汇编窗口。 |
layout regs |
显示源代码/反汇编和CPU寄存器窗口。 |
layout split |
显示源代码和反汇编窗口。 |
Ctrl + L |
刷新窗口 |
7. 参考文档
https://blog.csdn.net/niyaozuozuihao/article/details/91802994