GDB调试器
- GDB(GNU Debugger)是一个用来调试C/C++程序的功能强大的调试器,是linux系统开发C/C++最常用的调试器
- 程序员可以使用GDB来跟踪程序中的错误从而减少工作量
- VSCode是通过调用GDB调试器来实现C/C++的调试工作的
GDB主要功能
- 设置断点(断点可以是条件表达式)
- 使程序在指定代码行上暂停执行,便于观察
- 单步执行程序,便于调试
- 查看程序中变量值的变化
- 动态改变程序的执行环境
- 分析崩溃程序产生的core文件
常用调试命令参数
在调试开始时:执行gdb 可执行文件
,进入gdb调试程序.常用参数如下:
下面命令括号内为简写,比如run和r同意
$(gdb) help(h) #查看命令帮助
$(gdb) run(r) #重新开始运行文件
$(gdb) start #单步执行
$(gdb) list(l) #查看源代码,(list-n, 从第n行开始查看代码,list+函数名:查看具体函数)
$(gdb) set #设置变量的值
$(gdb) next(n) #单步调试(逐过程, 函数直接执行)
$(gdb) step(s) #单步调试(逐语句:跳入自定义函数内部执行)
$(gdb) backtrace(bt) #查看函数调用的栈帧和层级关系
$(gdb) frame(f) #切换函数的栈帧
$(gdb) info(i) #查看函数内部局部变量的数值
$(gdb) finish #结束当前函数 返回函数调用点
$(gdb) continue(c) #继续运行
$(gdb) print(p) #打印值和地址
$(gdb) quit(q) #退出gdb
$(gdb) x #查看内存x/20xw 显示20个单元, 16进制, 4字节每单元
$(gdb) run argv[1] argv[2] #调试时命令行传递参数
$(gdb) break+num(b) #在第num行设置断点
$(gdb) info breakpoints(i b) #查看所有设置的断点
$(gdb) delete breakpoints num(d) #删除第num个断点
$(gdb) display #追踪查看具体变量值
$(gdb) undisplay #取消追踪观察变量
$(gdb) watch # 被设置观察点的变量发生修改时,打印显示
$(gdb) i watch #显示观察点
$(gdb) enable breakpoints #启用断点
$(gdb) disable breakpoints #禁用断点
小例子测试gdb
我们的sum.cpp源码如下:
#include<iostream>
using namespace std ;
int main(int argc, char * argv[])
{
int N = 100 ;
int sum = 0 ;
int i = 1 ;
while(i <= N)
{
sum = sum + i ;
i = i + 1 ;
}
cout << "sum = " << sum << endl ;
cout << "The program is over " << endl ;
return 0 ;
}
编译生成可执行文件
在编译时一定要加入-g参数来允许GDB调试(尽管这会使可执行程序耗费更多资源):
g++ -g sum.cpp -o sum
调试查看
- 输入
gdb num
进入调试界面 - 在命令行模式下
:set nu
显示行号
-
建议调试GDB时,另起一控制台显示程序和行号,如下:
-
给13行打断点:b 13
-
运行至断点run
-
查看一次i的值,print i
,只会查看一次
-
持续查看i的值,display i
,在每次执行,都会展示一次i的值
-
退出gdb调试q
-
按enter会执行上一条指令
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)