GDB学习笔记
介绍
GDB是GNU项目下的调试器,运行在类UNIX系统下,可以对C, C++, Go等语言进行调试。
使用方法
1. 使用gcc编译程序
由于gdb在调试程序的时候需要依赖于源代码,因此需要在编译阶段开启调试模式(开启-g
选项)
1 | gcc -g test.c -o test |
2. 常用指令
指令 | 含义 |
---|---|
gdb program | 启动gdb调试program |
set args | 为待调试程序设置输入参数 |
show args | 显示输入的参数 |
list/l | 显示程序代码 |
list/l 行号 | 以输入行号为中间位置开始显示代码 |
list/l 函数名 | 显示某一函数的代码 |
list/l 文件名:行号 | 查看指定文件指定行号的源代码 |
list/l 文件名:函数名 | 查看指定文件指定函数的源代码 |
show list/listsize | 查看一次显示的源代码行数 |
set list/listsize | 设置一次显示的源代码行数 |
break/b 行号/函数名/文件名:行号 | 在某一行/函数入口/文件名:行号设置断点 |
info/i b | 查看断点信息 |
delete/d 断点编号 | 删除某一编号的断点 |
dis/disable 断点编号 | 使某一编号的断点无效 |
ena/enable 断点编号 | 使某一编号的断点重新生效 |
break/b 行号 if 条件 | 设置条件断点,一般用在循环的位置(一般用在循环的位置) |
3. gdb运行程序
运行程序
1
2start //程序停在第一行
run //到断点才停止,但是并不会执行断点代码
继续运行,直到下一个断点停止
1
c/continue
向下执行一行代码 (但是不会进入函数体)
1
n/next
向下单步调试(遇到函数体会进入函数体)
1
2s/step
finish(跳出函数体)变量操作
1
2p/print 变量名(打印变量值)
ptype 变量名(打印变量类型)
自动变量操作
1
2
3display num(自动打印指定变量的值)
i/info display
undisplay 编号其他操作
1
2set var 变量名=变量值
until 跳出循环(前提是循环内不含有断点)