一、gdb 常用命令
命令 | 描述 |
---|---|
backtrace(或bt) | 查看各级函数调用及参数 |
finish | 连续运行到当前函数返回为止,然后停下来等待命令 |
frame(或f) 帧编号 | 选择栈帧 |
info(或i) locals | 查看当前栈帧局部变量的值 |
list(或l) | 列出源代码,接着上次的位置往下列,每次列10行 |
list 行号 | 列出从第几行开始的源代码 |
list 函数名 | 列出某个函数的源代码 |
next(或n) | 执行下一行语句 |
print(或p) | 打印表达式的值,通过表达式可以修改变量的值或者调用函数 |
quit(或q) | 退出gdb 调试环境 |
set var | 修改变量的值 |
start | 开始执行程序,停在main 函数第一行语句前面等待命令 |
step(或s) | 执行下一行语句,如果有函数调用则进入到函数中 |
二、应用示列
1、gdb 调试带参数的程序
gdb main
(gdb) set args arg1 arg2 arg3 // 相当于./main arg1 arg2 arg3
(gdb) r <--------------------- 运行程序,run命令简写
show args
命令可以查看设置好的运行参数。
(gdb) r <--------------------- 运行程序,run命令简写
2、设置断点:
break 可带如下参数:
linenum 本地行号,即list命令可见的行号
filename:linenum 制定个文件的行号
function 函数,可以是自定义函数也可是库函数,如open
filename:function 制定文件中的函数
condtion 条件
(gdb) break 16 // 设置断点,在源程序第16行处。
(gdb) break func // 设置断点,在函数func()入口处。
(gdb) info break // 查看断点信息。
break test.c:10
break test.c:main
break 10 if index == 3 // 条件断点
3、调试步命令:
(gdb) start // 开始执行程序,停在
main
函数第一行语句前面等待命令
(gdb) n // 单条语句执行,next命令简写。
(gdb) c // 继续运行程序,continue命令简写。
(gdb) s // 执行下一行语句,如果有函数调用则进入到函数中
(gdb) finish // 退出函数。
4、输出信息:
(gdb) p i // 打印变量i的值,print命令简写。
(gdb) bt // 查看函数堆栈。