三分钟学会Linux环境下GDB调试C\C++代码

gdb常用指令

命令缩写说明
quitq退出gdb模式
detach分离(程序还会继续运行)
runr运行程序
listl查看源代码
nextn下一行
breakb打断点
b main.cpp:10 在main.cpp第十行设置断点
b main.cpp:class::print 设置函数断点
b main.cpp:10 if i == 10条件断点,只有条件满足才击中断点
info bi b查看断点情况
delete numd通过num删除断点(i b查看)
printp打印
ptypeptype打印变量类型
jumpj将当前程序执行流跳转到指定行或地址
continiuc继续程序的运行
steps进入某一个具体的函数(单步进入)
untilu当你厌倦了在一个循环体内单步跟踪时,单纯使用 until 命令,可以运行程序直到退出循环体。
until n 命令中,n 为某一行代码的行号,该命令会使程序运行至第 n 行代码处停止。
finishfi结束当前正在执行的函数,并在跳出函数后暂停程序的执行。(单步跳出)
return结束当前调用函数并返回指定值,到上一层函数调用处停止程序执行。(剩下的代码不会执行,直接返回值并返回调用处)
bt显示程序堆栈
watch监视某一个变量或内存地址的值是否发生变化
display监视的变量或者内存地址,当程序中断后自动输出监控的变量或内存地址
dir重定向源码文件的位置
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
info threads查看程序的线程信息
set logging on设置日志功能
set varname=v设置变量的值,
set args设置主程序的参数。
disassemble查看汇编代码(/m源码和汇编一起排列)()
rb xxx可以将所有带有xxx字符的函数都设置断点
tb xxx设置临时断点(只会击中一次)
disable/enable num通过num禁用和启用断点
examinexx/size option(f/x/d/u/o/t/a/c) addr 查看内存数据
info registers xxxi rLinux x64前6个整数或指针参数在寄存器RDI,RSI,RDX,RCX,R8,R9中传递
  • 系统默认不会生成core文件,需要自行设置系统文件.
  • 在使用gcc/g++编译时,添加参数-g,生成debug版本,如:g++ -g test.c
  • gdb有很多内嵌函数,例如:sizeof\strlen\strcpy\strcmp
  • set disassembly-flavor intel设置英特尔格式汇编
  • set print null-step 打印字符串时遇见\0就不会继续打印了
  • set print pretty 漂亮的显示,比较清晰易看,一行一个变量
  • set print array on 让数组一行一个的显示

启动程序并传入参数:

1. gdb --args a.out var1 var2 var3
1. gdb a.out,先启动可执行程序,然后通过set设置变量的值,例:set args var1 var2 var3
1. gdb a.out,在run后面传入参数.例:r var1 var2 var3

附加到进程:

1. gdb attach <process pid>
2. gdb --pid <process pid>

条件断点
1. (gdb) break line_number if i==5000

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@马云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值