LLDB python调试器寄存器读取



我需要跟踪程序的执行,所以我决定创建无限循环,读取pc寄存器并执行step。

IOS平台

:

通过这种方式,我想跟踪程序的执行流程。

问题是-我应该如何通过LLDB python API获得$pc寄存器?

您的程序可能有多个线程,每个线程将有不同的PC。因此,您将从SBProcess对象开始,然后它具有用于在线程上迭代的"threads"属性—由SBThread对象表示。SBThread有一个"frames"属性,它是所有"SBFrames"的数组,frames[0]是最底层的帧。SBFrame具有"pc"属性,即pc。Python SB API的这个表可能会帮助你:

LLDB Python api

然而,你试图做的事情在Xcode下不起作用-这通常是在iOS上进行调试的唯一方法。Xcode和Python目前正在争夺谁来控制进程的执行,在某些时候,错误的一方获胜,导致执行停滞。

您可以使用独立的Python驱动程序来完成这类事情,例如:

流程事件示例

但是由于你不能真正从独立的lldb附加到iOS进程,这很难用于iOS开发。

顺便说一句,我偶尔在Mac OS X上做过你描述的事情,而且它也非常非常慢。你只有在绝望的时候才会这么做。

有时可以通过在每个函数入口点上设置断点来获得相同的效果,可以在lldb命令行中使用:

(lldb) break set -r .

,如果您只关心跟踪某些给定的模块,您可以在"断点集"行中添加一次或多次——shlib选项,以限制这些库的断点。然后编写一个断点命令(可以在Python中执行)来收集必要的信息。这仍然是缓慢的,但更接近于可用。

最新更新