当我打电话时,例如图像列表,如果它们我有很多数字。目前,我只是将其复制出来然后再使用它。但是真的没有别的办法吗?我希望能够做image list | grep ...
答案 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脚本的介绍性网页:
答案 1 :(得分:0)
我整理了一个小脚本,该脚本允许通过任何shell实用程序传递LLDB命令的输出:
https://github.com/ihnorton/lldb.sh
安装该脚本后,任何(希望!)lldb命令都可以以sh
为前缀,然后是|
和一个shell命令。例如,以下通过image list
到wc -c
的输出进行管道传输并返回字符数:
(lldb) sh image list | wc -c
3898
或
(lldb) sh image list | grep <your library>
...
它也适用于少一些的传呼机:
(lldb) sh image list | less
...