一、调试前题
1、要使用GDB进行调试必须在编译的时候加上编译选项:
命令行编译: g++ -g test.cpp -o test
Makefile工程编译: ./configure --enable-debug=yes
二、调试步骤
1、进入调试: #gdb test
2、设置断点:break(b)
b 16 #断点设置在16行
b src/A.cpp:行号 #设置A文件的某一行
b funcname #设置在函数的入口处,双Tab可以补齐函数名
b namespace::A::funcname #设置项目中的某个函数的入口处
b src/A.cpp:funcname #设置某文件的函数的入口处
3、运行程序到断点处:run(r)
4、单步调试:
next(n) #不进入函数内部
step(s) #进入函数内部
5、继续运行到下一断点:continue(c)
6、退出循环体:until(u)
7、退出函数:finish(f)
8、退出调试:quit(q)
三、常用命令
1、列出源码: list(l)
2、直接回车表示执行上一次命令。
3、打印变量i的值:print(p) i
四、启动gdb的方式
1、正常启动方式: gdb test
2、调试正在运行的后台服务程序: gdb test pid (pid为进程号)
3、当出现内存错误时,查看错误信息: gdb test core
4、调试内存泄露问题:
- 先取消限制,生成core.pid文件:ulimit -c unlimited;
- 运行程序test
- 启动调试:gdb -c core.pid test
- 查看堆栈情况: where 或者bt