在 GDB 中,我有一个 Python 脚本,每当当前文件/行号发生变化时,它都会使用
gdb.prompt_hook
向打开的 vim 会话发送命令。有效地为我提供了“实时更新”源视图。我使用的脚本是公开可见的here。
我想将此脚本移植到 LLDB,但我无法找到与
gdb.prompt_hook
等效的脚本。 IE。当执行停止时控制权返回到 LLDB 或当前帧发生更改(例如执行 f N
)时,可以通过某种方式执行 Python 脚本。
有人可以建议我可以使用哪些 API 来实现这个吗?
(注:我已经了解 LLDB 的
gui
观点。)
lldb 中没有“提示打印”回调。 如果有人有野心的话,不难添加,但目前不存在。
您可以通过监听事件系统的“进程状态更改”、“线程更改”和“帧更改”通知来完成此操作。 例如,要在用户更改调试器中的线程或帧时收到通知,您必须使用 SBThread Broadcaster 注册这些更改。 您可以通过获取 SBThread::GetBroadcasterClassName() 侦听所有线程的所有事件,创建侦听器并使用 SBListener::StartListeningForEventClass 为线程类广播器向 SBDebugger 进行注册。 您可以类似地注册 SBProcess 状态更改事件,以了解进程何时启动和停止。 然后调用
SBListener.WaitForEvents
来获取事件并将更改信息发送到 vim。