gdb详解
一、调试前的准备
用gcc编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果您打算编译后的程序可以被调试,编译的时候要加-g的参数,例如:
1 | gcc -g -o book113 book113.c |
在命令提示符下输入gdb book113就可以调试book113程序了。
1 | gdb book113 |
二、基本调试命令
命令 | 命令缩写 | 命令说明 |
---|---|---|
list | l | 列出源码,根据源码指定行号,设置断点 |
set args | 设置主程序的参数。例如:./book119 /oracle/c/book1.c /tmp/book1.c设置参数的方法是:gdb book119(gdb) set args /oracle/c/book1.c /tmp/book1.c | |
break | b | 设置断点,b 20 表示在第20行设置断点,可以设置多个断点。 |
run | r | 开始运行程序, 程序运行到断点的位置会停下来,如果没有遇到断点,程序一直运行下去。 |
next | n | 执行当前行语句,如果该语句为函数调用,不会进入函数内部执行。 |
step | s | 执行当前行语句,如果该语句为函数调用,则进入函数执行其中的第一条语句。注意了,如果函数是库函数或第三方提供的函数,用s也是进不去的,因为没有源代码,如果是您自定义的函数,只要有源码就可以进去。 |
p | 显示变量值,例如:p name表示显示变量name的值。 | |
continue | c | 继续程序的运行,直到遇到下一个断点。 |
set var name=value | 设置变量的值,假设程序有两个变量:int ii; char name[21];set var ii=10 把ii的值设置为10;set var name=”fsda” 把name的值设置为”fsda”,注意,不是strcpy。 | |
finish | 结束当前函数调用,返回到函数调用点 | |
info b | info b 查看设置的断点信息 | |
ptype | 查看变量类型 例如:ptype name表示查看变量name的类型 | |
bt | 列出当前程序存活者的栈帧 | |
frame | 根据栈帧编号,替换栈帧 | |
(un)display | 设置跟踪变量 | |
quit | q | 退出gdb环境。 |
注意,在gdb环境中,可以用上下光标键选择执行过的gdb命令。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BillySturateの秘密基地!