GDB 调试总结

GDB 调试总结

启动:

$gdb || $gdb 然后(gdb)file

运行:

(gdb)run <该程序本身的命令行参数>

查看代码:

(gdb)list 简写为 (gdb)l

技巧(gdb)list 1,20 //查看1到20行的代码

使用断点:

建立断点

(gdb)break //可以简写为(gdb)b

(gdb)b || : //这种是为还没有打开的源代码设置断点

(gdb)b || : ||

//在一个物理地址设置断点

查看断点

(gdb)info b

删除断点

(gdb)delete

(gdb)clear || :

条件断点

(gdb)break <operator(通常是函数名)> if = //用于在满足某个条件时中断执行,在该operator处暂停

运行过程:

单步跟踪:

(gdb)step //缩写s

往下执行:

(gdb)next //缩写n

检查数据:

(gdb)display //例如(gdb)display stack->index

(gdb)print //缩写p

改变数据:

(gdb)set = //例如set stack->index=100

检查堆栈:

(gdb)backtrace //缩写bt, 将会打印当前调用的堆栈,从深到浅

停止程序:

(gdb)quit //缩写q

多进程调试:

跟踪子进程:

(gdb)set follow-fork-mode child

跟踪父进程:

(gdb)set follow-fork-mode parent

设置gdb在fork时询问跟踪哪一个进程:

(gdb)set follow-fork-mode ask

多线程调试:

如果某一行代码被多个线程使用,可以这样设置断点:

(gdb)b pos.c:17 thread 5 //在地pos.c的17行设置断点,但只对第5个线程生效。

(gdb)info threads //查看当前应用程序中所有的线程

(gdb)b pos.c:17 thread 5 if ret > 0 //在pos.c的17行设置断点,当内部栈变量ret > 0 时中断

去指定线程:

(gdb)thread

锁定调度器来避开gdb根据优先权来改变当前线程:

(gdb)set scheduler-locking on/off

确定当前模式

(gdb)show scheduler -locking

想所有线程应用一个命令:

(gdb)thread apply all <command(比如backtrace)>

(gdb)thread apply 1 4 9 backtrace

调试已有的进程:

$gdb

挂接指定进程 :(gdb)attach <进程号>

脱离指定进程 :(gdb)dettach

调试内核转储文件:

$test

产生一个core文件,需要设置系统环境,见我的博客文章 www.cppblog.com/TianShiDeBaiGu/articles/125785.html

$gdb test core.12345

??????????????????????????,没有尝试过的

(gdb)wacth 监控一个变量改变

(gdb)tbreak临时断点

断点禁用启用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值