禁止 lldb 'type category delete'命令中的错误



摘要

我想抑制lldb 中的错误消息

type category delete Name

命令,如果指定的类别不存在,则会出现该命令。

背景和细节

我使用类型摘要来获得更大项目中各种类型的自定义描述。这里有一个最小的例子,只是为了证明这个问题:

import lldb
import shlex
import optparse
def __lldb_init_module (debugger, dict):
debugger.HandleCommand('type category delete MyApp')
debugger.HandleCommand('type summary add --python-script 'return "BOO"' --category MyApp BooType')
debugger.HandleCommand('type summary add --python-script 'return "WHOA"' --category MyApp WhoaType')
debugger.HandleCommand('type category enable MyApp')

类型摘要被放入一个专用类别中,以便轻松启用和禁用。脚本所做的第一件事是删除我所有的自定义类型摘要,以便我可以在Python代码中进行更改并使用从正在运行的调试会话中重新加载

(lldb) command script import /path/to/test.py

唯一的问题是,当脚本第一次加载:

(lldb(命令脚本import/path/to/test.pyerror:无法删除一个或多个类别

是否有方法抑制此错误消息或调用type category delete仅当类别已存在时才命令?

这里有两种方法。

最简单的是仍然添加您的类别&格式化程序通过命令行命令,并只抑制错误输出:

SBDebugger。HandleCommand并不是在SB API中运行命令的唯一方法。还有SBCommandInterpreter。HandleCommand。SBDebugger版本是为了方便(例如,在交互式脚本解释器中(,但正如您所看到的,您无法控制结果。

SBInterpreter提供了另一种变体,它允许您捕获命令结果,这很有用,因为它允许您以编程方式对结果进行操作,但如果您只想抑制输出,它也很方便。所以,与其做你现有的,不如做:

interp = debugger.GetCommandInterpreter()
result = lldb.SBCommandReturnObject()
interp.HandleCommand('type category delete MyApp', result)

这个调用不会将命令的结果回显到调试器输出,如果您愿意,这取决于您是否执行。您可以使用result.Succeeded()等检查命令是否成功。

但是SB API还提供了对类型类别以及它们所包含的格式化程序、摘要和合成子提供程序的直接访问。例如,你可以做:

my_app_category = debugger.GetCategory("MyApp")
if not my_app_category:
debugger.CreateCategory("MyApp")

如果你想这样做,你也可以使用SBTypeCategoryneneneba API以编程方式访问该类别中的格式化程序:

https://lldb.llvm.org/python_api/lldb.SBTypeCategory.html

最新更新