gdb调试脚本

55 篇文章 0 订阅

gdb脚本在在线调试时很有用处,使业务流程不被中断的情况下产生需要的调试信息,在不需要人工干预的情况下通过set logging file FILENAMEset logging on来实现将调试信息输出到文件。我们直接查看log文件就可以得到我们需要的调试信息了。

gdb调试脚本我知道的有两种,一种是直接写gdb命令,一种是python脚本。

gdb命令方式更直接且方便,但是支持的逻辑有限只有ifwhileloop等几种,并且缺乏对文本的解析。python适合写比较复杂的解析过程,结合re模块功能很强大。

gdb加载脚本的方式有

  • autoload方式

  • gdb -x script方式

  • gdb命令source script方式

autoload方式需要把 脚本放置到/usr/share/gdb/auto-load/usr/lib/目录下,当前目录默认会有libstdc++.so.6.0.18-gdb.py脚本了。

其他两种方式都是手工加载的。

gdb脚本支持所有的gdb指令,直接写gdb脚本的示例:


file bin
set logging on gdb.log
break function
command
p $pc
frame
info register
//其他一些事情
countinue
end
run

python脚本需要gdb模块的支持,他一般位于/usr/share/gdb/python/gdb目录,详细的帮助可以通过help(gdb)来获取,我就不多说了,gdb python脚本的示例:


import regdb.execute("set logging on db.log")
class A(gdb.Function):
    def __init__(self):
    super(A, self).__init__("a")
    def invoke(self, str):
    re.search("\t", str)
    //do()
    return str
gdb.execute("a")

在测试环境下,直接gdb -x script bin执行就可以了。当然如果是生产环境下,就可能在出错的时候通过ptracte等方式来触发了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值