GDB常用命令

参考

命令缩写作用备注
runr重启程序Ctrl + C 可让 GDB 中断
continuec 或 cont继续程序Ctrl + C 中断后,用 c 恢复
breakb设置断点break 部分
info breaki b显示当前所有断点信息——
backtracebt查看当前调用堆栈——
framef 堆栈编号切换到其他堆栈处f 4 : 切换到编号 #4
listl输出上一次list命令显示的代码后面的代码如果是第一次执行list命令
则会显示当前正在执行代码位置附近的代码
print paramp查看变量的值p a
whatis val-查看变量类型ptype val,作用和 whatis 类似
info thread-查看当前进程的所有线程运行情况thread 线程编号,可切换到具体编号的线程上
输出的线程号前面带 * 号的是当前所在线程
eg: thread 3
nextn单步执行遇到函数直接跳过,不进入函数内部
steps单步执行遇到函数会进入函数内部。
return立即退出当前函数剩下的代码不会执行了
finish退出当前函数继续执行完该函数剩余代码再正常退出
until与 break 类似——
jump跳转
disassemble查看汇编指令disassemble thread_2
set args参考
watch监视一个变量或者一段内存当这个变量或者内存的值发生变化时,GDB就会中断下来

使用“info address function_name”来查找函数地址。例如,如果您想查找名为“test”的函数的地址,您可以在gdb中输入“info address test”

您可以使用gdb中的“examine”命令(简写为“x”)来查看指定内存地址处的内容。命令格式为“x/nfu ”,其中“n”表示需要显示的内存单元个数,也就是从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的“u”定义;“f”表示显示格式。例如,如果您想查看地址0x7fffffffd708处的内容,您可以在gdb中输入“x/1xb 0x7fffffffd708”

您可以在gdb中使用以下命令来查看函数“thread_2”的汇编代码:

(gdb) disassemble thread_2

(gdb) n
316	    printf("main: hello world\n");

表示下一个要运行的是316行


  • disable 断点编号:禁用某个断点,使得断点不会被触发
  • enable 断点编号:启用某个被禁用的断点
  • delete 断点编号:删除某个断点。

  • jump LineNo:跳转到代码的 LineNo 行的位置
  • jump +10:跳转到距离当前代码下10行的位置
  • jump *0x12345678:跳转到 0x12345678 地址的代码处,地址前要加星号;

注意

  1. 中间跳过的代码是不会执行的;
  2. 跳到的位置后如果没有断点,那么GDB会自动继续往后执行;

用GDB调试多线程程序时,该程序的编译需要添加 -lpthread 参数。


break

用法说明举例例子说明
break FunctionName函数的入口处添加一个断点b main在 main 函数入口点设置断点
break LineNo当前文件行号为LineNo处添加断点b 100在当前文件的 第100行 设置断点
break FileName:LineNoFileName文件行号为LineNo处添加一个断点b anet.c:441在anet.c文件 第 441 行设置断点
break FileName:FunctionName~b test.c:main在test.c文件的 main 函数入口点设置断点
break -/+offset当前程序暂停位置前/后 offset 行处下断点b +100~

list

用法说明
list -显示上一次list命令显示的代码前面的代码
list LineNo显示当前代码文件第 LineNo 行附近的代码
list FileName:LineNo显示 FileName 文件LineNo 行附近的代码
list FunctionName显示 当前文件FunctionName 函数附近的代码
list FileName:FunctionName显示 FileName 文件FunctionName 函数附件的代码
list from,to显示这之间的代码
show listsize查看 list 命令显示的代码行数
set listsize count设置 list 命令显示的代码行数为 count

list *$pc 当前运行处

print

  • print param=value :用于在调试过程中修改变量的值;
  • print a+b+c:可以进行一定的表达式计算,这里是计算a、b、c三个变量之和;
  • print func():输出func函数执行的结果,常见的用途是打印系统函数执行失败原因:print strerror(errno);
  • print *this:在c++对象中,可以输出当前对象的各成员变量的值;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值