[libcxx]用gdb打印libcxx容器内的内容

本文介绍如何使用 LLVM 的 libc++ STL 实现美化打印容器元素的方法。由于调试工具不了解 STL 的内部实现,因此需要借助特定脚本或插件来展示容器内部元素。文章分享了一个 GitHub 项目,该项目提供了 LLVM libc++ 大多数容器的美化打印脚本,并给出了实现思路和参考资料。

  llvm带来很多很多好用的东西,比如clang,还有一个STL实现:libcxx.其优点不表,就说怎么打印STL容器内的元素吧.

  实际上gdb,包括任何调试工具,都是不了解STL的,因为他不知道STL内部是怎么实现的.所以需要展示STL内部元素的时候,就需要用到一些脚本,或者插件之类的(VS也是这样).gdb在7.x支持python写插件,所以很多人都用python插件来打印libstdc++容器内的元素.

  llvm官方本身没有实现pretty printers,包括lldb这个项目也一样(只是实现了部分容器的parser).

  本来还想讲讲怎么实现一个容器的parser,不过想想其实很简单了,看着sample很快就学会了.

  不卖关子了,这边给出llvm libcxx基本上所有容器的pretty printer,https://github.com/egmkang/pretty_printer_for_libcxx/

  暂时不支持vector<bool>和bitset,如果有需要的话,知会一声,我去写.

  写的时候参考了:

  http://tromey.com/blog/?p=524

  http://tromey.com/blog/?p=546

  https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Developer_Guide/debuggingprettyprinters.html

  

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值