GDB的一些命令使用
本文内容来自:linuxc编程一站式学习
在编译文件是加上 -g 编译选项即可调试。gdb调试和源文件有关,不止是和编译生成的文件有关。
wytx@ubuntu:~$ gcc -g -o hello hello.c
wytx@ubuntu:~$ gdb ./hello
这就启动了gdb,下面是调试时需要用到的常用命令
单步、函数跟踪等基本命令
命令 | 描述 |
---|---|
backtrace(或bt) | 查看各级函数调用及参数 |
finish | 执行到当前函数返回,然后停下来等待命令 |
frame(或f) | 帧编号 选择栈帧 |
info(或i) | locals 查看当前栈帧局部变量的值 |
list(或l) | 列出源代码,接着上次的位置往下列,每次列10行 |
list 行号 | 列出从第几行开始的源代码 |
list 函数名 | 列出某个函数的源代码 |
next(或n) | 执行下一行语句 |
print(或p) | 打印表达式的值,通过表达式可以修改变量的值或者调用函数 |
set var | 修改变量的值 |
start | 开始执行程序,停在main函数第一行语句前面等待命令 |
step(或s) | 执行下一行语句,如果有函数调用则进入到函数中 |
直接回车 | 执行上一条命令 |
断点相关的命令
命令 | 描述 |
---|---|
break(或b) | 行号 在某一行设置断点 |
break 函数名 | 在某个函数开头设置断点 |
break…if… | 设置条件断点 |
continue(或c) | 从当前位置开始连续而非单步执行程序 |
delete breakpoints | 删除断点 |
display 变量名 | 跟踪查看一个变量,每次停下来都显示它的值 |
disable breakpoints | 禁用断点 |
enable breakpoints | 启用断点 |
info(或i) breakpoints | 查看当前设置了哪些断点 |
run(或r) | 从头开始连续而非单步执行程序 |
undisplay | 取消对先前设置的那些变量的跟踪 |
break 10 if sum != 0 //在第10行设置断点,当sum不等于0是才有效
观察点相关命令
命令 | 描述 |
---|---|
watch 变量名 | 设置观察点(例如 watch temp) |
info(或i)watchpoints | 查看当前设置了哪些观察点 |
delete watchpoints | 也是可以删除观察点的 |
x 例如:x/7b | 从某个位置开始打印存储器的一段内容,全部当成字节来看,而不区分哪些字节属于哪些变量;x命令打印存储器中的内容。 7b是打印格式, b表示每个字节一组, 7表示打印7组 |