是否可以过滤LLDB输出?

时间:2014-10-16 07:45:38

标签: xcode lldb

当我打电话时,例如图像列表,如果它们我有很多数字。目前,我只是将其复制出来然后再使用它。但是真的没有别的办法吗?我希望能够做image list | grep ...

之类的事情

2 个答案:

答案 0 :(得分:4)

首先,“图像列表”将模块名称作为参数,因此如果您知道要查找的模块,则可以执行以下操作:

(lldb) image list Foundation
[  0] 18EDD673-A010-3E99-956E-DA594CE1FA80 0x00007fff8e357000 /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation 

但是,lldb命令行本身不支持管道或过滤操作,而不支持命令本身提供的操作。我们将这种任务卸载到脚本解释器,从那时起我们就可以利用脚本语言提供的整个生态系统。到目前为止,我们只支持Python,所以你会这样做:

(lldb) script
>>> for module in lldb.target.modules:
...     if module.file.basename == "Foundation":
...         print module.file
... 
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation

或者你真正想做的事情... LLDB的Python帮助相当不错,所以要找到你在Python中可以使用的内容,请执行以下操作:

(lldb) script
>>> help (lldb.SBModule)
Help on class SBModule in module lldb:
etc...

还有一个Python脚本的介绍性网页:

http://lldb.llvm.org/python-reference.html

答案 1 :(得分:0)

我整理了一个小脚本,该脚本允许通过任何shell实用程序传递LLDB命令的输出:

https://github.com/ihnorton/lldb.sh

安装该脚本后,任何(希望!)lldb命令都可以以sh为前缀,然后是|和一个shell命令。例如,以下通过image listwc -c的输出进行管道传输并返回字符数:

(lldb) sh image list | wc -c
    3898

(lldb) sh image list | grep <your library>
...

它也适用于少一些的传呼机:

(lldb) sh image list | less
...