【问题标题】:Is it possible to filter LLDB output?是否可以过滤 LLDB 输出?
【发布时间】:2014-10-16 07:45:38
【问题描述】:

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

【问题讨论】:

    标签: xcode lldb


    【解决方案1】:

    首先,“图像列表”将模块名称作为参数,所以如果您知道要查找的模块,您可以这样做:

    (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

    【讨论】:

    • 顺便说一句,LLDB Python API 也有一个“HandleCommand”接口,可以返回命令的文本输出,所以如果由于某种原因需要过滤特定命令的输出,可以运行脚本解释器中的命令,然后对 lldb.SBCommandReturnObject 进行任何您想要的过滤。
    【解决方案2】:

    我整理了一个小脚本,允许通过任何 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>
    ...
    

    它也适用于像 less 这样的寻呼机:

    (lldb) sh image list | less
    ...
    

    【讨论】:

    • 这个 Python 小脚本非常棒。它只是让我的 lldb 体验改善了 26%。如果您经常使用 lldb,强烈推荐。
    猜你喜欢
    • 1970-01-01
    • 2023-02-10
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2021-12-15
    • 2015-09-03
    • 2021-04-19
    相关资源
    最近更新 更多