如何连接到lldb?

How to hook into lldb?

主要的开放式问题是:如何将 LLDB 与可转换为 C/C++ 的语言一起使用。我想要的是使用 python 脚本挂接到默认的 LLDB 函数,以便它

最终目标是为 LLDB 提供一个 python 脚本来支持它,这样许多 UI LLDB 前端(XCode、VSCode 等)将自动从中受益。

编辑:我已经设法通过从所有 SBCompileModules 获取所有类型、检查它们并提供合成格式化程序来解决类型问题。符号"demangling"和断点映射还是问题

您还可以添加匹配 .* 的正则表达式匹配格式化程序。由于 lldb 将首先尝试所有非正则表达式匹配器,因此这不会取代内置格式化程序。正则表达式匹配器比静态模式匹配慢,但对于您的目的来说仍然可以接受,并且如果应用程序很大,可能不会比在您的应用程序中为每种类型添加一个格式化程序的结果差很多。这可能更容易实现。

您可以使用 script.thread.python_functionscript.frame.python 线程和框架格式(此处描述:http://lldb.llvm.org/formats.html)进行自定义回溯打印(包括您的分解)以回溯输出。

Python 无法提供自定义解码器。符号打印不像线程和框架打印那样使用格式化程序完成,因此无法进行干预。我看不到从外面做这件事的好方法。

目前在 Python 中没有可插入的方式来编写断点解析器内核,尽管 lldb 旨在允许这样做。但是,如果您可以让代码转换器将#file 和#line 声明发送到 C/C++ 源中,那么这些重新映射将进入调试信息,以便 lldb 可以获取它们。