我开发了一个LLVM前端生成LLVM IR作为来自某些源语言X的目标代码。如果我扩展此前端以在生成的IR中嵌入调试信息,是否可以使用LLDB进行调试我的源语言?我的意思是lldb支持任何源语言定位LLVM IR吗?
答案 0 :(得分:3)
您必须获取DWARF语言代码并让lldb识别它。如果我们得到一些未知语言的DWARF,我们就会忽略它......
然后在没有更多支持的情况下,有些东西会起作用,有些东西会胜利。
如果您发出正确的行表信息,您应该能够映射回您的源代码,并且这也应该是步进工作。其他事情开始变得艰难。
下一个难点是如何告诉lldb您的类型信息。 lldb使用Clang的AST作为调试器中类型信息的内部存储器。 lldb将DWARF类型信息转换为Clang AST,用于打印局部变量(使用frame variable
命令)并与表达式解析器一起使用。
如果您的语言类型系统看起来有点类似C lldb应该能够为您的类型解析DWARF。您加上正确的变量信息应该frame variable
正常工作。
表达式解析器(即expression
,print
或po
命令)要求lldb为您的语言提供解析器。这可能是一大笔工作。