我目前正在为C ++中的自定义对象编写绘图命令。我正在使用Xcode v10.1。
我使用命令脚本import test.py 导入自己的命令,其中具有以下功能:
import lldb
def test_function(debugger, command, result, dict):
obj = lldb.frame.FindVariable("custom_object")
print(obj)
def __lldb_init_module (debugger, dict):
debugger.HandleCommand('command script add -f test.test_function test')
自定义对象是我要在Python脚本中使用的对象。
如果我刚刚打开调试器,则会收到错误消息:
obj = lldb.frame.FindVariable("custom_object")
AttributeError: 'NoneType' object has no attribute 'FindVariable'
但是,当我直接在Xcode中打开嵌入式Python解释器并执行与上述相同的代码行时,我不会出错。
如果我现在再次执行自定义命令,它将对调试器相同范围内的所有对象成功执行。
答案 0 :(得分:1)
lldb.frame
,这就是NoneType
的原因。 lldb.{process, thread,frame}
只是为了方便交互式脚本解释器。但是,对于一条命令来说并没有意义-它可能会在停止钩子,断点命令等中运行,以使其进程和线程依赖某些全局状态。毕竟,您可能有两个线程同时到达相同的断点。因此,没有唯一的“ lldb.thread”。
最好使用命令功能的版本,该版本将SBExecutionContext作为第三个参数(在http://lldb.llvm.org/python-reference.html中进行了描述),并从该参数获取线程和框架。