gdb tips

gdb tips (by hanlray(at)gmail.com)

gdb program
指定要调试的程序,进入gdb环境,但是并不运行该程序
break/b linespec
设置断点,linespec指定断点位置,可以用多种方式指定,如行号、函数名等
break/b linespec thread threadno
在指定的threadno上设置断点,断点只对该线程有效,不指定thread的断点是对所有线程有效的。
run
在gdb下运行该程序

schedule

当从断点处恢复执行时(不管是continue执行还是单步执行),OS继续进行正常的线程调度,直到下一个断点(对单步执行来说就是下一个语句),有时候这种调度可能会影响单步的调试,可以用

set scheduler-locking on

来关闭OS调度,用set scheduler-locking来查看当前值

signal

当被调试的进程进入running状态后,terminal由该进程控制,因此不会出现gdb提示符,这时如何和gdb交互呢(比如想添加一个断点)?必须停止该进程,使控制权回到gdb:
  • 如果设置有断点,可以触发断点
  • 向gdb发送signal。最简单的方法就是用intr(Ctrl-C)字符产生SIGINT,因为gdb对SIGINT的处理是停止进程,不把该signal传递给进程,可以用info handle来查看当前gdb对signals的处理情况,如:
    Signal        Stop      Print   Pass to program Description SIGHUP        Yes       Yes     Yes             Hangup SIGINT        Yes       Yes     No              Interrupt SIGQUIT       Yes       Yes     Yes             Quit 
    Stop列表示是否停止进程,Print表示是否打印该signal,Pass to program列表示是否把该signal传给调试的进程

当gdb收到一个signal而停止进程后,传递signal到进程的动作还没有发生,此时可以用handle命令修改对signal的处理方式,当继续执行进程使才会根据当前的设置决定是否把该signal传给进程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值