LLVM和矮人调试信息

use*_*249 2 compiler-construction llvm dwarf llvm-ir

我试图在LLVM优化期间保留DWARF调试信息,我的问题是:我能以某种方式插入LLVM中每条指令的调试信息吗?LLVM会在执行所有优化过程时保留这些信息,然后转储DWARF带注释的LLVM优化IR吗?

我相信,如果这有效,我可以有一个后端(当然支持那些调试信息)生成最终的结束代码(或多或少由于优化)可调试源代码,我是否正确?

ech*_*sto 5

对于llvm,优化的调试信息仍然是一个非常新的领域.它正在积极开发中,但很多都取决于你在寻找什么.精确的变量跟踪并不存在,因为它经历了变换 - 可变信息偶尔会丢失.目前SROA传球特别糟糕.

也就是说,如果您正在寻找线路信息和类型信息,那么您应该没问题.参数应该相当不错,所以你不会有太多的"通过传递优化".

至于如何注释源代码,最简单的方法是查看clang为IR和调试元数据发出的内容.确保使用DIBuilder类来处理大多数事情,并注意位置如何附加到IR级别指令.大多数代码都在clang/lib/CodeGen/CGDebugInfo.cpp中.

希望这有帮助,如果您有任何问题,请随时在llvm-dev或cfe-dev邮件列表上询问.

  • 是否有任何努力使llvm像gcc -fvar-tracking-*一样有能力? (2认同)
  • 有,是的.随着优化质量的提高,优化的调试信息是调试信息路径上的"下一个"区域.请参阅Adrian Prantl最近关于处理SROA代码和mem2reg的工作. (2认同)