GDB基本命令

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wk_bjut_edu_cn/article/details/82664268

GDB

参数列表

命令

命令缩写

命令说明

list

l

显示多行源代码

break

b

设置断点,程序运行到断点的位置会停下来

info

扫描二维码关注公众号,回复: 3307205 查看本文章

i

描述程序的状态

run

r

开始运行程序

display

disp

跟踪查看某个变量,每次停下来都显示它的值

step

s

执行下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句

next

n

执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句)

print

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跟踪查看某个变量,每次停下来都显示它的值

猜你喜欢

转载自blog.csdn.net/wk_bjut_edu_cn/article/details/82664268