GDB
参数列表
命令 |
命令缩写 |
命令说明 |
list |
l |
显示多行源代码 |
break |
b |
设置断点,程序运行到断点的位置会停下来 |
info
扫描二维码关注公众号,回复:
3307205 查看本文章
|
i |
描述程序的状态 |
run |
r |
开始运行程序 |
display |
disp |
跟踪查看某个变量,每次停下来都显示它的值 |
step |
s |
执行下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句 |
next |
n |
执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句) |
|
p |
打印内部变量值 |
continue |
c |
继续程序的运行,直到遇到下一个断点 |
set var name=v |
设置变量的值 |
|
start |
st |
开始执行程序,在main函数的第一条语句前面停下来 |
file |
装入需要调试的程序 |
|
kill |
k |
终止正在调试的程序 |
watch |
监视变量值的变化 |
|
backtrace |
bt |
产看函数调用信息(堆栈) |
frame |
f |
查看栈帧 |
quit |
q |
退出GDB环境 |
启动GDB
#include <stdio.h>
int main(int argc,const char* argv[])
{
printf("args num=%d\n",argc);
for(int i=0;i<argc;++i)
{
printf("arg%d:%s\n",i,argv[i]);
}
return 0;
}
命令list显式源代码,默认只显示10行,不过可对此进行更改
查看代码:list
当前文件(3种方式):
l
l 行号
l 函数名
非当前文件
l 文件名:行号
l 文件名:函数名
l 5并不是显式第五行,而是以第五行为基准,上下加起来共分配默认的行数(10行)。
l默认显式的是包含main函数的文件,也可以指定显式其它文件
l inset_sort.c后面可以跟行号也可以跟函数名
断点操作
断点操作 break / b
设置断点:
b 行号
b 函数名
b 文件名:行号
b 文件名:函数名
查看断点:
i b
删除断点:
d num(断点的编号)
d num1 num2
d num1-num5
设置断点无效:
dis num
断点生效:
ena num
设置条件断点:
b 行号if 变量==var
设置许多断点
i b查看设置了哪些断点
删除断点可以是1个delete 5,也可以是多个delete 1-10
设置无效断点(前提是断点存在),虽然断点还存在,但是路过不会停。dis+行号
将无效断点恢复为有效断点ena+断点编号
条件断点的设置b 17 if i==10,意思就是i==10的时候才停,而不是i=1
c是指继续程序的执行,直到遇到下一个断点
调试相关命令
打印变量的值:
p 变量名
打印变量的类型:
ptype变量名
向下单步调试(2种方法):
next -n,不会进入函数体
step -s会进入函数体内部,跳出函数体:finish
finish,如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish
until,结束当前循环
继续运行gdb,停在下一个断点的位置
continue -c
打印元素值或者元素类型
n后面没有参数就是一步一步走,如果n 2,就是每次走两步
display跟踪查看某个变量,每次停下来都显示它的值