1. 前提条件
- 如果需要gdb调试,在编译时必须加上-g参数
gcc -g hello.c -o hello
启动gdb: gdb program
- 启动后类似进入一个shell终端窗口
2. 启动gdb
- 启动gdb:
gdb ./app
- 设置运行参数:
set args hello world I am here
- 查看运行参数:
show args
- 启动程序:
run
- 程序向下执行一行:
start
3. 显示源代码
list 10
:打印第十行代码的上下文内容list main
:打印函数名为main的函数的原程序list
:显示当前行后面的原程序list -
:显示当前文件开始处的源程序list fun1.c:10
:显示fun1.c文件下第10行list fun1.c:fun1
:显示fun1.c文件下的函数fun1的源程序set listsize 20
:设置一次显示源代码的默认行数show listsize
:查看当前listsize的设置
4. 设置断点(block)
b 10
:源程序第十行设置断点b main
:源程序main函数处设置断点b fun1.c:10
:在源文件fun1.c的第十行处停住b fun1.c:fun1
:在源文件fun1.c的fun1函数处停住info b
:查看所有的断点b test.c:8 if intValue=5
:条件断点d 1
:删除(delete)断点号为1 的断点d 1 2 4
:删除断点号为1,2,4的断点d 3-6
:删除范围内的断点d
:删除所有断点disable
:使所有断点无效(简写为dis)disable 1
:使断点号为1的断点无效disable 1 2
:使多个断点无效disable 3-6
:范围断点无效enable
:使所有无效断点生效(简写为ena)enable 1
:使断点号为1的断点生效enable 2 3
:使多个无效断点生效enable 4-6
:使范围内无效断点生效
5 调试代码
run
:运行到第一个断点,可以简写为rnext
:单步跟踪,不进入方法体(n)step
:单步跟踪,进入方法体(s)finish
:退出进入的函数until
:在一个循环体内单步追踪,知道运行到退出循环体(u)continue
:跳到下一个断点print count
:打印count的值,可以简写为p
6 自动显示变量的值
display count
:单步追踪时自动显示count变量info display
:查看display设置的自动显示的信息undisplay 1
:使编号为1的自动显示变量不自动显示delete display 1
:删除编号为1的自动显示变量delete display 1-3
:你猜是啥意思disable display 1
disable display 1 2 4
enable display 1 2
ptype width
:查看变量width的类型set var width=47
:将程序中变量width的值改为47