使用Python脚本时,Xcode lldb调试器中的lldb.frame变量为空

时间:2018-11-16 14:31:22

标签: python c++ xcode lldb

我目前正在为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解释器并执行与上述相同的代码行时,我不会出错。

如果我现在再次执行自定义命令,它将对调试器相同范围内的所有对象成功执行。

1 个答案:

答案 0 :(得分:1)

在基于lldb python的命令中未定义

lldb.frame,这就是NoneType的原因。 lldb.{process, thread,frame}只是为了方便交互式脚本解释器。但是,对于一条命令来说并没有意义-它可能会在停止钩子,断点命令等中运行,以使其进程和线程依赖某些全局状态。毕竟,您可能有两个线程同时到达相同的断点。因此,没有唯一的“ lldb.thread”。

最好使用命令功能的版本,该版本将SBExecutionContext作为第三个参数(在http://lldb.llvm.org/python-reference.html中进行了描述),并从该参数获取线程和框架。