Compiler construction LLVM和dwarf调试信息

Compiler construction LLVM和dwarf调试信息,compiler-construction,llvm,llvm-ir,dwarf,Compiler Construction,Llvm,Llvm Ir,Dwarf,我试图在LLVM优化期间保留DWARF调试信息,我的问题是:我是否可以以某种方式为LLVM中的每条指令插入调试信息?LLVM会在执行所有优化过程时保留这些信息,然后向我转储一个带矮人注释的LLVM优化IR吗 我相信,如果这样做有效,我可以让后端(当然支持那些调试信息)生成最终的最终代码,这些代码(或多或少由于优化)可以与源代码一起调试,对吗?LLVM在编译时,会以二进制文件中的矮人部分的形式生成。所有的优化都试图保留这些信息,尽管它并不总是得到保证。优化的调试信息对于llvm来说仍然是一个非常新

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


我相信,如果这样做有效,我可以让后端(当然支持那些调试信息)生成最终的最终代码,这些代码(或多或少由于优化)可以与源代码一起调试,对吗?

LLVM在编译时,会以二进制文件中的矮人部分的形式生成。所有的优化都试图保留这些信息,尽管它并不总是得到保证。

优化的调试信息对于llvm来说仍然是一个非常新的领域。它正在积极开发中,但很大程度上取决于你在寻找什么。精确的变量跟踪实际上并不存在,因为它经历了转换——变量信息偶尔会丢失。SROA通行证目前尤其糟糕

也就是说,如果您正在查找行信息和类型信息,您应该可以。参数应该相当好,这样你就不会有太多的参数被“优化”了

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


希望这对您有所帮助,如果您有任何问题,请随时在llvm开发人员或cfe开发人员邮件列表上提问。

谢谢您的支持,我对此也很感兴趣:)我正在做一件类似的事情,我相信您应该禁用一些转换过程以保留所有调试信息,否则,一些人将失去任何正在进行的努力,使llvm作为gcc-fvar跟踪能力-*?有,是的。随着优化质量的提高,优化调试信息是调试信息路线上的“下一个”区域。请参阅Adrian Prantl最近关于处理SROAD代码和mem2reg的工作