首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >11 hit python句柄断点命中

11 hit python句柄断点命中
EN

Stack Overflow用户
提问于 2014-07-13 11:03:58
回答 1查看 1.6K关注 0票数 2

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

请帮我拿些代码片段!

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-15 20:06:38

在该页上:

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

有一节题为:

命中断点时运行PYTHON脚本

有一些有用的信息。

您要做的是“向断点添加命令”。这个命令的lldb命令是“断点命令add”。所有基本的lldb命令都以"noun [sub.]谓词选项“的形式存在;知道这可能有助于将您想要做的事情转换为在命令中设置该操作的命令的位置。无论如何,关于“断点命令add”的帮助还有可能有用的其他示例。

然后精简版本是,制作一个python模块,其中包含一个带有此签名的函数:

代码语言:javascript
复制
breakpoint_function (frame, bp_loc, dict)

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

代码语言:javascript
复制
(lldb) command script import "path to your .py file"

如果您已经设置了PYTHONPATH来指向它,也可以在“命令脚本导入”中使用模块名,但是与Python的“导入”不同,该命令将为您处理这个问题。

然后创建一个断点,并使用"br“将您的函数添加到其中:

(lldb) br com a -F MyModule.breakpoint_function

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

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

"bploc“参数是命中断点的”断点位置“。在lldb中,一个“断点规范”(这是您用“断开集”设置的内容)可以解析到多个位置。例如,“源模式”断点可能与代码中的许多源模式相匹配。所以你可能想知道哪个被击中了。

"dict“选项是这样我们就可以保存一些东西,并将其传递给Python,应该让它单独使用。

要记住的另一件事是,尽管脚本解释器(使用" script“命令可以访问)定义了lldb.thread、lldb.frame等方便变量,但在运行断点命令时不会设置这些变量。因此,如果您在脚本解释器中使用了这些变量,同时对命令进行了原型化,那么如果需要在断点命令中使用这些变量,就必须从传入的框架中找到它们。

注意,Python断点命令目前在Xcode 6中不起作用,不过应该在完成时修复它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24721980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档