我想介绍一下我生成的一些LLVM IR代码.就llc和lli而言,代码在语法和类型上是有效的,但结果不是我所期望的.
这些块足够大,以至于我只是简单地读出了这个bug,而且我很难用相同的bug生成一个更小的例子.
我认为我可以使用类似调试器的东西,但是对于LLVM IR.换句话说,我希望能够逐步执行llvm代码,检查"无限"寄存器(给定LLVM IR文件中的名称)和内存位置,设置断点,直到找到我的代码出错的地方.
我看着lli和lldb,但也好像是我要寻找的工具.lli将运行我的代码,但不要让我一步一步走.lldb似乎假设代码是由C前端生成的.
我错了约lldb和lli?有谁知道一个工具甚至可以达到我想要的50%?
我不知道这样的事情(我怀疑它不存在).虽然我很乐意分享我对llvm生成的代码调试的观点.
debugtrap内在(简单地生成int3或在您的架构上等效).你可以用这个东西做断言,看看哪个失败了.%0,%1但有意义%names) - 它们在llc输出中显示为注释.opt --dot-cfg 1.ll; dot cfg.funcname.dot -Tpng > 1.png 所以我建议的工作流程如下.建立CFG(4.)和汇编(通过llc).打破gdb中生成的代码并逐步执行它(或让它在你的一个asserions上陷阱).将您在gdb中停止的点与llc输出相关联,读取注释,与CFG相关联.神交.
您还可以从生成的代码中构建CFG表示.我知道IDA Pro(一种非常昂贵的CFG构建方式)和Saga提供此类功能的工具.
PS:这最初是一个评论,但它变得太长了.
小智 8
曾经有一个 LLVM pass 可以-debug-ir做到这一点。看这个答案。
我需要一个像这样的实用程序来调试我生成的一些代码。因此,我将上面的补丁改编成一个独立的工具,可以将行号信息附加到输入 LLVM-IR 文件中,并生成输出 LLVM-IR,其调试信息引用输入文件。https://github.com/vaivaswatha/debugir
| 归档时间: |
|
| 查看次数: |
1716 次 |
| 最近记录: |