Linux的调试器——gdb
- 我们知道,程序的发布方式有两种,debug模式和release模式。
- debug模式:调试模式,通常不进行优化或优化级别很低,便于调试,包含完整的调试符号和行号信息,生成的可执行文件较大,运行速度较慢。
- release模式:发布模式,启用高级优化,提高代码执行效率,通常移除或减少调试信息,禁用断言,可执行文件较小,运行速度更快。
- 在Linux gcc/g++ 出来的二进制程序,默认是release模式
- 因此,要使用gdb调试,必须在源代码生成二进制程序的时候,设为debug模式。、
设为debug模式方法:
在生成可执行代码的时候,加上-g选项:
gcc -o mycode_debug mycode.c -g
开始使用
在第一次使用gdb时,需在root用户下安装gdb:
1. 开始调试
2. 结束调试
ctrl + d 或 quit 调试命令
3. 显示源代码
一次指令可从指定的行号向下显示10行代码,且具有记忆性(继续回车可以再往下显示10行代码)
因此,如果我们想要显示完整代码,可以从第0行开始回车显示,即:l 0
列出某个函数的源代码。
4. 逐语句与逐过程
- n 或 next:逐语句,单条执行,相当于vs的F10
- s 或 step:逐过程,可以进入函数调用,相当于VS的F11
5. 运行到断点
- r或run:运行程序。相当于VS的F5。
如果没有断点,就运行整个程序。
6. 打断点
- b或break + 行号:在该行设置断点。
- b或break + 函数名:在该函数开头设置断点
- info break :查看断点信息。
- delete 断点号:删除该序号的断点
- delete:删除所有断点
- disable + 断点号:禁用断点
- enable + 断点号:启用断点
- continue(或c):运行到下一个断点
注意:断点号在断点信息里查看
7. 其他常用运行指令
- continue(或c):运行到下一个断点
- until + 行号:跳到指定行
- finish:运行完当前函数
💡:这三个指令可以帮助我们限定出问题的上下文
8. 监视变量
- display + 变量名:跟踪查看一个变量,每次停下来都显示它的值
- info display:查看被监视的变量的信息
- undisplay + 变量编号:取消对该变量的跟踪
- undisplay:取消对先前设置的那些变量的跟踪
9. 查看函数调用情况及参数
breaktrace(或bt):查看函数调用情况及参数
10. 查看当前栈帧局部变量的值
info locals:查看当前栈帧局部变量的值
11. 修改变量的值
set var:修改变量的值