egmkang 服务端开发工程师

给gdb写pretty printer碰到的问题

2014-10-17
gdb

之前给libc++写过一个pretty printer插件, 当时还挺好用的, 最近在调试程序不好使了. 首先是python版本发生了变化, 老版本python迭代器只需有next函数就可以了, 新版本的换成__next__函数. 这个是一个小问题.

碰到了一个大问题, 以前写代码的时候, 没有考虑typedef之后的类型:

#include <vector>
int main()
{
  typedef std::vector<int> IntVector;
  IntVector aaa;
  return 0;
}

在这个实例程序中, 变量aaa的类型是IntVector, 导致我用正则表达式匹配vector时失败, 没有匹配到, 然后也就不会调用pretty printer. 后来查阅资料才发现, gdb的python模块是支持获取typedef之前的类型的:

  typename = str(val.type.strip_typedefs())

至此, 这个pretty printer终于算是写完了… 之前都是半成品:(


上一篇 vim-plugin

Comments