使用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

时间: 2024-10-25 04:26:29

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

运维前线:一线运维专家的运维方法、技巧与实践3.3 利用批处理与Shell脚本简化逻辑节点的搬迁

3.3 利用批处理与Shell脚本简化逻辑节点的搬迁 3.3.1 逻辑节点切换脚本的思路 众所周知,对于服务器的搬迁,不只会涉及物理层面的设备搬迁.在物理设备搬迁到新机房后,往往还需要对虚拟机中的多种参数进行相关调整. 如果管理的服务器台数比较少的话,则可以采用手工设置的方式逐一更改参数.但是,如果手中管理的Windows和Linux虚拟机有数千台的话,那么这些繁琐的参数调整一定会让你头疼不已.其中需要调整的参数如下: IP GATEWAY DNS WSUS NTP HOSTS 也许大家要问,像

使用脚本简化工作

转载请注明出处:http://blog.csdn.net/horkychen   *今天新建了一个类别:生产力.主要想集中写一些提升工作效率的思考和实践,用技术解决问题.据说Google都有专门的生产力部门,专司研究工具和方法,可见生产力虽然零碎,但如果能有系统的加以研究,一定会些收获.   如果工作中有一些需要从网上获取资料的工作,比如获取哪些人还有多少Bug之类的事情,那么下面的内容或许可以给些启发.   网页数据基本是以HTTP Request获取数据.比如我这篇文章里提到了,使用XPat

获取打印机正在打印的数据

问题描述 获取打印机正在打印的数据 现在有一个需求,我的想法是写一个程序,一直监听打印机,如果有打印数据,先获取需要打印的数据,进行一定的加工然后再放回打印机继续打印.我现在只有这个想法但是不知道如何实现,请大神们提供一点思路,不限语言,越方便越好 解决方案 我也想要这答案,期待求解

jquery使用attr访问自定义属性,减少javascript脚本中代码和数据

[示例代码]<html> <head> <script src="jquery-1.2.js"></script> <script> $(document).ready ( function () { $("#link").click ( function () { alert($(this).attr("var")); } ); } ); </script> </he

c语言-为什么第二次调用show_all还能打印出数据,指针不是已经到了链表的最后了吗

问题描述 为什么第二次调用show_all还能打印出数据,指针不是已经到了链表的最后了吗 #include #include struct student { int num; float score; struct student pnext; }; typedef struct student st; void add(st **phead, int inum, float iscore) { if (*phead == NULL) { st *newnode = (st)malloc(si

android-如何在常规字符串数组中打印 sqlite 数据?

问题描述 如何在常规字符串数组中打印 sqlite 数据? 我写下面的代码来填充数据库,现在我想在一个数组中复制数据,然后在 arrayadapter 打印出来. 我使用 tabactivity,这是我找到的最好的解决方法. public void insertIntoTable(){ try{ mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null); mydb.execSQL("INSERT INTO " + TA

ssh可以打印出数据,但是还是报nullpoint,帮忙看看什么问题

问题描述 ssh可以打印出数据,但是还是报nullpoint,帮忙看看什么问题 public String addgdbl(){ System.out.println("----->+进来了么?"); maintlist=gdblBiz.getMaintlist(maintlist.getListcode()); material=gdblBiz.getMaterial(material.getMalcode()); if(material==null){ System.out.

数据操纵语言中数据的操作

  --表数据的操作 --输入数据 select * from 学生 --说明 :用在insert与表名之间的into是一个可选关键字 insert into 学生 (学号,姓名,性别,年龄,专业) values ('003','杨丽','女',18,'计科') insert into 学生 (学号,姓名,性别,年龄,专业) values ('004','杨丽','女',18,'计科') delete 学生 where 学号 = '004' alter table 学生 add constrai

Shell脚本检查IP格式及mysql操作实例

  这篇文章主要介绍了Shell脚本检查IP格式及mysql操作实例,本文直接给出脚本代码,需要的朋友可以参考下 还是cronjob的一部分,就是在Rails的定时任务里,后台交互运行 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 CheckIPAddress() { e