gdb常用命令详解

gdb常用调试命令概览和说明

run命令

在默认情况下,gdb+filename只是attach到一个调试文件,并没有启动这个程序,我们需要输入run命令启动这个程序(run命令被简写成r)。如果程序已经启动,则再次输入 run 命令就会重启程序。

continue命令

在程序触发断点或者使用 Ctrl+C 组合键中断后,如果我们想让程序继续运行,则只需输入 continue 命令即可(简写成 c)。当然,如果通过 continue 命令让程序在继续运行的过程中触发设置的程序断点,则程序会在断点处中断。

break命令

break 命令即我们添加断点的命令,可以将其简写成 b。

##在functionname函数的入口处添加断点
break functionname
##在当前文件行号为LineNo的地方添加一个断点
break LineNo
##在filename 文件行号为LineNo的地方添加一个断点
break filename:LineNo

tbreak命令

break 命令用于添加一个永久断点;tbreak 命令用于添加一个临时临时断点。

backtrace与frame命令

backtrace 可简写成 bt,用于查看当前所在线程的调用堆栈。如果我们想切换到其他堆栈处,则可以使用frame命令。frame命令可被简写成f。

frame 堆栈编号

info break、enable、disable、delete命令

在程序中加了很多断点以后,若想查看加了哪些断点,则可以使用info break命令

如果我们想禁用某个断点,则使用 disable 断点编号就可以禁用这个断点了,被禁用的断点不会再被触发;被禁用的断点可以使用enable断点编号并重新开启。

如果disable和enable命令不加断点编号,则分别表示禁用和启用所有断点

使用delete编号可以删除某个断点。如果输入delete时不加命令号,则表示删除所有断点。

list命令

list命令用于查看当前断点附近的代码,可以简写成l。

list+命令(即list加号)可以从当前代码位置向下显示10行代码(向文件末尾方向)。list-命令(即list 减号)可以从当前代码位置向上显示10行代码(往文件开始方向)。

print与ptype命令

print命令可以被简写成 p。通过 print命令可以在调试过程中方便地查看变量的值,也可以修改当前内存中的变量值。通过 print命令不仅可以输出变量的值,也可以输出特定表达式的计算结果,甚至可以输出一些函数的执行结果。

通过 print命令不仅可以输出表达式的结果,还可以修改变量的值

info与thread命令

info命令是一个复合指令,可以用来查看当前进程所有线程的运行情况。

info命令还可以用来查看当前函数的参数值,组合命令是info args。

next、step、until、finish、return、jump命令

next命令可被简写为n,next命令的调试术语叫“单步步过(step over)”,即遇到函数调用时不进入函数体内部,而是直接跳过。

step命令就是“单步步入(step into)”,顾名思义,就是遇到函数调用时进入函数内部。step可被简写为 s。

return命令用于结束执行当前函数,同时指定该函数的返回值

finish命令用于执行完整的函数体,然后正常返回到上层调用中

until 命令,可被简写为u,我们使用这个命令让程序运行到指定的行停下来

jump命令的基本用法如下:

jump <location>

location可以是程序的行号或者函数的地址,jump会让程序执行流跳转到指定的位置执行,其行为也是不可控的

在gdb命令行界面直接按下回车键,默认是将最近一条命令重新执行一遍

set args与show args命令

         很多程序都需要我们传递命令行参数。在gdb调试中使用gdb filename args这种形式给被调试的程序传递命令行参数是行不通的。正确的做法是在用gdb attach程序后,使用run 命令之前,使用 set args 命令行参数来指定被调试程序的命令行参数。可以通过show args查看命令行参数是否设置成功。

如果在单个命令行参数之间有空格,则可以使用引号将参数包裹起来。

如果想清除已经设置好的命令行参数,则使用set args不加任何参数即可。

watch命令

        watch是一个强大的命令,可以用来监视一个变量或者一段内存,当这个变量或者该内存处的值发生变化时,gdb就会中断。监视某个变量或者某个内存地址会产生一个观察点(watch point)。

需要注意的是:当设置的观察点是一个局部变量时,局部变量失效后,观察点也会失效。

display命令

display 命令用于监视变量或者内存的值,每次 gdb 中断,都会自动输出这些被监视变量或内存的值。

display命令的使用格式是display 变量名/内存地址/寄存器名。

我们可以使用info display查看当前已经监视了哪些值,使用delete display清除全部被监视的变量,使用delete display 编号移除对指定变量的监视。

dir命令

可执行程序崩溃,我们用gdb调试core文件时,gdb可能会提示“No such file or directory”。

gcc/g++编译出来的可执行程序并不包含完整的源码,-g 只是加了一个可执行程序与源码之间的位置映射关系,我们可以通过dir命令重新定位这种关系。

##加一个源文件路径到当前路径的前面,指定多个路径,可以使用“:”
dir SourcePath:SourcePath2:SourcePath3

SourcePath1、SourcePath2、SourcePath3 指的就是需要设置的源码目录,gdb 会依次到这些目录下搜索相应的源文件。

如果要查看当前设置了哪些源码搜索路径,则可以使用show dir命令。

dir命令不加参数时,表示清空当前已设置的源码搜索路径。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值