【发布时间】:2014-10-11 01:30:29
【问题描述】:
我开发了一个 LLVM 前端,生成 LLVM IR 作为来自某些源语言 X 的目标代码。如果我扩展这个前端以在生成的 IR 中嵌入调试信息,是否可以使用 LLDB 进行调试我的源语言?我的意思是 lldb 是否支持针对 LLVM IR 的 any 源语言?
【问题讨论】:
我开发了一个 LLVM 前端,生成 LLVM IR 作为来自某些源语言 X 的目标代码。如果我扩展这个前端以在生成的 IR 中嵌入调试信息,是否可以使用 LLDB 进行调试我的源语言?我的意思是 lldb 是否支持针对 LLVM IR 的 any 源语言?
【问题讨论】:
您必须获得一个 DWARF 语言代码并让 lldb 识别它。如果我们得到一些未知语言的 DWARF,我们会忽略它...
如果没有更多的支持,有些事情会奏效,有些则不会。
如果您发出正确的线表信息,您应该能够映射回您的源,这应该也可以让步进工作。其他事情开始变得艰难。
下一个困难的部分是你将如何告诉 lldb 你的类型信息。 lldb 使用 Clang 的 AST 作为调试器中类型信息的内部存储。 lldb 将 DWARF 类型信息转换为 Clang AST,用于打印局部变量(使用 frame variable 命令)和用于表达式解析器。
如果你的语言有一个看起来有点像 C 的类型系统,那么 lldb 应该能够为你的类型解析 DWARF。你会加上正确的变量信息应该让frame variable工作。
表达式解析器(即expression、print 或po 命令)要求 lldb 具有适用于您的语言的解析器。这可能是相当大的工作量。
【讨论】: