GDB调试
-
调试程序准备
如准备调试test.c文件:
-
编译时,一定要加 -g,如:gcc -test -g -o test
-
生成可执行程序test后进入GDB调试功能:gdb test
-
设置命令行参数:set args (后接要输入的参数)
-
显示设置的命令行参数:show args
-
启动可执行程序(一直执行到断点):run或r
-
启动可执行程序(只执行一行):start
run命令和start命令在一次调试中只能使用一次
-
继续执行(执行到下一个断点):continue或c
-
退出gdb调试:q或者quit
-
-
查看代码 list(或l)
-
输入list:代码从第一行开始显示(默认显示10行,继续显示需要键入回车)
回车:默认输入上次执行的命令
调整显示的行号: set listsize:行数
显示当前显示的行号: show list或show listsize
-
list 行号:显示对应行的代码以及上下文
-
list 函数名: 显示这个函数的代码
-
list 文件名:行号 -> 切换文件,显示该文件对应行号的代码
-
-
断点break(或b)
- b 行号
- b 函数名
- b 文件名:行号
- b 文件名:函数名
- 设置条件断点: b 行号 if 变量名==某个值
- info(或者i) b:查看当前断点信息
-
删除断点(delete或del或d)
d 断点编号1 断点编号2 …
d 1-5:删除断点1-断点5
-
设置断点状态
设置断点无效
disable(或dis):使用方法同delete
使无效断点生效
enable(或ena):同del
-
调试命令
continue(或c):继续运行程序
print(或p)变量名:打印变量值
指定类型打印
- /x :十六进制打印整数
- /d :有符号十进制打印整数
- /u:无符号十进制打印整数
- /o:八进制打印整数
- /t:二进制打印整数
- /f:浮点数打印变量或表达式的值
- /c:打印字符
ptype 变量名:查看变量类型
display 变量名:自动显示某个变量的值
-
del display 变量名:不再显示这个变量的值(被删除)
-
ena和dis的使用方法同del
undisplay 变量名:取消自动跟踪
-
单步调试
step(或s):执行下一行,如果是函数体,则进入函数体
finish:跳出当前函数体(函数体中不能有有效断点)
next(或n):执行下一行,但不会进入函数体
until:跳出循环体
- 跳出的循环体不能有有效断点
- 必须在循环体的开始/结束执行该命令
set var 变量名=值:设置变量值