gdb相关

目录

gdb的使用

gdb xx

回车键

list 或者 l(list的简写)

quit

run或者r

b(breakpoint断点)

next或者n(逐过程,对应vs编译器的F10)

step或者s(逐语句,对应vs编译器的F11)

finish(vs编译器调试时不存在这种操作)

until(跳转到对应语句)

continue或者c(跳转逐个断点)

bt(调用堆栈)

display(常显示)

undisplay

disable /enable(关闭或者打开断点的使能enable)

p(监视)

info b(显示断点)

delete或者d(删除断点)


gdb的使用

gdb xx

xx代表某个debug版本的可执行文件,如果是release版本无法调试。

回车键

在gdb模式下执行一个指令后,回车键就变成了这条指令的快捷方式,按回车键可以直接执行这个指令。比如我现在执行list指令,那么gdb模式下,目前回车键就是执行list指令的快捷方式。但此时输入其他指令,回车键也会变成其他指令的快捷方式。

list 或者 l(list的简写)

进入gdb模式后,list 或者 l 可以查看代码详情。一次只显示一部分,所以可以继续输入list或者 l 显示剩余代码,由于回车键的特殊性,可以直接回车显示剩余代码。l 0可以从第一行开始向下显示。

quit

进入gdb模式后,quit可以退出调试。

run或者r

进入gdb模式后,run命令可以让程序走到断点的位置,对应vs编译器上的热键F5。

注意:

1.当程序中没有断点时,F5和run命令是不会让程序执行到某处后停下来的,会直接跑完程序并安全退出。 

2.比如说最开始的断点在第3行,现在程序执行到了第9行,此时想回到第3行重新开始调试可以直接再次输入run或者r。

b(breakpoint断点)

b n,即可完成打断点的操作,n代表行号。如图:

next或者n(逐过程,对应vs编译器的F10)

进入gdb模式后,执行run语句并且成功让程序执行到某一个断点处停下来后,next或者n就可以让

程序跳转到下一个有代码的行继续执行代码,因为空行是不需要执行的,next会直接跳过空行。

step或者s(逐语句,对应vs编译器的F11)

进入gdb模式后,执行run语句并且成功让程序执行到某一个断点处停下来后,step或者s就可以让程序逐语句执行。什么意思呢?因为当前行可能有函数调用,函数一般由多条语句构成,所以逐语句就是遇到函数调用时就进入函数里逐语句执行。也就可以得到一个结论,如果当前函数中没有函数调用,那逐语句和逐过程是等效的。

finish(vs编译器调试时不存在这种操作)

如果当前已经进入了一个函数,但此时想直接退出当前函数并且退出后立刻停止执行,等待下一步调试的指令。想完成这种操作就可以用finish,注意如果当前正在执行的语句所在的函数是main,finish将会无效。

until(跳转到对应语句)

until n,n代表行号,表示从正在执行的语句直接跳转到第n行。不建议跨函数执行。如果没有循环,不可以跳转到已经执行完毕的语句。

continue或者c(跳转逐个断点)

用于从正在执行的语句直接跳转到下一个断点处。当没有断点时,直接跑完所有剩余的语句后正常退出程序。

bt(调用堆栈)

可以用于查看调用的堆栈,如下图:

1. 由于栈是先进后出,如上图中,当前正在执行的语句所在的函数栈就是AddToTop,上图中的(top=100)表示top是函数的形参,100是用户传的实参。从上到下是栈顶元素到栈底元素。

2.调用堆栈只有先进入调试模式后才可以使用,比如vs编译器上,只有先F10,才可以在调试的窗口选项中找到调用堆栈这一选项,如果不进入F10调试模式,则找不到,如下图中就没有调用堆栈这个选项:

display(常显示)

和p不一样的是:p只会打印一次,之后输入其他调试指令,监视的变量就不打印了。而display xx后,xx代表变量名,不管输入什么调试指令,xx变量会一直打印,如下图:

undisplay

用于取消常显示。但注意:和删除断点一样,取消变量常显示也是取消变量对应的编号即可:

如下两张图:

disable /enable(关闭或者打开断点的使能enable)

1. disable n, n代表断点编号,而不是行号,如上图,disable 1后,1号断点的enb就变成了n(no的意思),而其他编号的断点是y(yes)。

2.关闭断点使能表示:断点仍然存在,只是作为断点,它的功能失效了。

p(监视)

p xxx,xxx代表变量名,可以打印变量的值。

info b(显示断点)

用于查看所有断点。如下图:

 左边红框代表断点的编号,右边红框代表断点的行号。

delete或者d(删除断点)

用于删除断点,如上图,删除的时候不是delete 行号,而是delete 上图红框中的Num里的编号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值