lldb python处理断点命中

时间:2014-07-13 11:03:58

标签: python debugging scripting lldb

我正在查看这个庞大的LLDB python参考手册,但仍无法找到如何使用我的代码处理断点命中。 我的意思是,当某个断点被击中时,我想运行我的foo()。

请帮我一些代码片段!

或者在Python参考手册中指出所需的类。

感谢名单!

1 个答案:

答案 0 :(得分:2)

在页面上:

http://lldb.llvm.org/python-reference.html

有一节标题为:

在突发事件发生时运行一个PYTHON SCRIPT

有一些有用的信息。

您正在做的是"在您的断点处添加命令"。 lldb命令是"断点命令add"。所有基本的lldb命令都采用"名词[sub-noun [...]]动词选项&#34 ;;知道这可能有助于将您想要做的事情转换为命令集中的操作所在的命令。无论如何,关于"断点命令的帮助添加"有其他可能有用的例子。

然后压缩版本是,创建一个包含带有此签名的函数的python模块:

breakpoint_function (frame, bp_loc, dict)

使用以下命令将该模块带入lldb:

(lldb) command script import "path to your .py file"

您还可以在"命令脚本导入"中使用模块名称。如果你已经设置了PYTHONPATH来指向它,但不像Python" import"你没必要,命令会为你处理。

然后制作一个断点,并使用" br com a"添加你的功能:

(lldb)br com--M MyModule.breakpoint_function

现在当一个断点被击中时,你的函数将被调用以下参数:

"框架"参数是命中断点的框架。你可以从框架中获取线程。因此,如果你需要它,完整的堆栈。

" bploc"参数是"断点位置"打到断点。在lldb one"断点规范" (这是您设置的" break set")可以解析到许多位置。例如,一个"源模式"断点可能与代码中的许多源模式匹配。所以你可能想知道哪一个被击中了。

" dict"选项是这样我们可以松散一些东西并将它传递给Python,它应该是独立的。

要记住的另一件事是,虽然脚本解释器(可通过"脚本"命令访问)定义lldb.thread,lldb.frame等便利变量,但这些变量不会设置你的断点命令正在运行。因此,如果您在编写命令原型时在脚本解释器中使用了这些变量,则必须在传递的帧中找到它们,如果在断点命令中需要它们的话。

请注意,Python断点命令目前不适用于Xcode 6,但应该在完成时修复。