Linux调试器-gdb使用
- 1.背景
- 2.调试原理、技巧命令
- 2.1指令
- 2.2 本质
- 2.3 技巧
1.背景
程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
gcc test.c -o test -g -std=c99
gdb test
2.调试原理、技巧命令
2.1指令
list (可简写为l)列出代码 ,每次列出行
l1从第一行开始列出,Enter继续列出
b 打断点
r 运行
c(continue r运行到断点处按c继续往后继续进行)
我们有更好cgdb来使用,默认就是上面是代码下面是调试部分 不需要自己list
b 行号 或者b 函数名(前面可以通过b 源文件.c:指明)
info b 列出断点编号(大多数操作有关断点的操作是根据这里列出的断点编号来定的)
info locals 显示所有临时变量
d 编号(删除断点)
n/next 逐过程
s/step 逐语句
bt 调用栈帧
p 变量 打印指定变量
disable 编号 (使断点失能)
enable 编号 (使断点能)
c 跳转到下一个断点
finish 使当前函数执行完 局部区域的快速执行
until 行号 运行到xx行 局部区域内的快速运行
display 变量 (常显示变量)
undisplay 变量编号 (使变量退出常显示)
p 表达式
2.2 本质
调试的本质:
1.找到问题
2.查看代码上下文
断点的本质,是把代码进行块级划分,以块(两个断点之间)为单位快速定位问题区域
2.3 技巧
调试技巧
watch+变量 有些变量不该变却变了
set var 变量=值
条件断点
创建断点并设条件 b 13 if i10 在i10时停止
已存在断点设立条件 condition 断点编号 i==20
cgdb分屏操作
进入代码区
要进入代码区,只需按下ESC键。此时,输入焦点会切换到上方的代码窗口,该窗口类似于vi编辑器,可以浏览、搜索和设置断点等操作。
回到调试端
要从代码区回到调试端(GDB窗口),只需按下i键。此时,输入焦点会切换回下方的GDB窗口,可以在该窗口中输入GDB调试命令,进行程序调试。