我正在尝试在LLVM优化期间保留DWARF调试信息,我的问题是:我可以以某种方式插入LLVM中每条指令的调试信息吗? LLVM会在执行所有优化过程时保留这些信息,然后转储一个DWARF带注释的LLVM优化IR吗?
我相信如果这样做,我可以有一个后端(当然支持那些调试信息)生成最终的结束代码(或多或少由于优化)可以用源代码调试,我是正确的吗?
答案 0 :(得分:5)
优化的调试信息对于llvm来说仍然是一个非常新的领域。它正在积极开发中,但很多都取决于你正在寻找什么。精确的变量跟踪在经历变换时并不存在 - 可变信息偶尔会丢失。 SROA通行证目前特别糟糕。
也就是说,如果您正在寻找线路信息和类型信息,那么您应该没问题。参数应该相当不错,所以你不会有太多的参数和#34;优化了"通过。
至于如何注释源代码,最简单的方法是查看clang为IR和调试元数据发出的内容。确保使用DIBuilder类来处理大多数事情,并注意位置如何附加到IR级别指令。大部分代码都在clang / lib / CodeGen / CGDebugInfo.cpp。
中希望这有帮助,如果您有任何问题,请随时在llvm-dev或cfe-dev邮件列表上询问。
答案 1 :(得分:1)
LLVM already supports dwarf-like annotations in the IR,在编译时,会生成二进制中的矮节。所有优化都试图保留这些信息,但并不总能保证。