日期:2014-05-16  浏览次数:20409 次

使用LLDB脚本简化打印复杂数据的操作

上次提到用了LLDB脚本来扩展一些功能。 这次是简化打印复杂数据的操作。
 
不知道大家都没有遇到过在gdb和lldb里输出一个类时困扰,常常要一个个属性展开下去,或者调用提供函数来检查。分享一个使用LLDB脚本来简化变量输出的方法。
 
以输出Element的属性为例,其下面的属性很多,我们其实只想知道属性名称和值就可以了。数据结构展开如下:

 


如果使用lldb脚本,只需要输入 p attr就可以查看了,只是输出的结果格式化的不太好。

 


脚本可以到这里下载。支持四种数据输出: WTF::String, WTF::AtomicString, WebCore::QualifiedName, WebCore::Attribute。


脚本的写法很简单,目前对字串的输出使用的是memory read方法,效果不太好。主要因为StringImpl中的m_data8是放在一个union中的,导致lldb对它不能使用printf(), 另外在代码中查找时也是按序号处理,先找到union,再找m_data8的。
 
详细的内容可以参考LLDB的文档:
 
LLDB Data Formatters
 
*注意脚本要按上次的方式添加到.lldbinit里面去,然后重启XCode就可以了。
 
GDB有类似的功能,没有研究。如果觉得有用,可以从这里入手研究一下:
  
用gdb打印libcxx容器内的内容

 

转载请注明出处:http://blog.csdn.net/horkychen