python gdb_用 Python 拓展 GDB(二)

欢迎来到《用python拓展gdb》的第二篇。在上一篇,我们学习了gdb提供的常用python接口,并用python实现了自定义命令和调试脚本。

到目前为止,我们都是在用python实现内置DSL(领域特定语言)也能实现的效果。从本篇开始,我们将继续上路,去欣赏内置DSL所缺乏的新风景。

下一站,Pretty-Printer。

什么是Pretty-Printer

当我们在gdb中打印一个类/结构体时,gdb会尝试输出该类型的所有成员和它们的值。对于指针,即是输出指针所指向的地址。如果要想进一步查看指针指向的值,需要使用p *cls->x@range这样的语法,来转换出该地址上对应的值。毕竟,C/C++是一门接近硬件的语言,如果你不指明某个地址上的具体意义,在计算机看来,不过是些字节罢了。

如果你调试过C++的STL容器,就会(惊喜地)发现:gdb并不会把容器里面各种乱七八糟的成员都打印一通,相反它仅仅输出容器里面的数据(除非你使用的gdb版本感人)。这一特性的背后,离不开Pretty-Printer的功劳。Pretty-Printer允许用户使用python给指定类编写自定义的打印方式。事实上,gdb内置了一个python脚本,正是这个脚本决定了STL容器的打印输出。

项目中的某个类太过于复杂?

正在使用某个自定义的数据结构?

想要快速看出某个属性的编码代表什么?

Pretty-Printer可以帮你解决以上所有问题。

实现一个Pretty-Printer

跟自定义命令不同,Pretty-Printer不需要用户去继承某一类&#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值