在LLVM优化期间,我试图保留DWARF调试信息,我的问题是:我可以以某种方式为LLVM中的每条指令插入调试信息吗?LLVM是否会在执行所有优化过程时保留这些信息,然后转储给我一个带有DWARF注释的LLVM优化IR?
我相信如果这样做有效的话,我可以让一个后端(当然支持这些调试信息)生成最终的最终代码,这些代码(或多或少由于优化)可以用源代码进行调试,我说的对吗?
发布于 2014-04-04 10:53:30
优化的调试信息对于llvm来说仍然是一个非常新的领域。它正在积极开发中,但这在很大程度上取决于您正在寻找的是什么。精确的变量跟踪并不是真正存在的,因为它经历了转换-变量信息有时会丢失。SROA的通行证目前特别糟糕。
也就是说,如果您正在查找行信息和类型信息,则应该没问题。参数应该相当好,这样你就不会有太多的参数被传递“优化”了。
至于如何注释源代码,最简单的事情是查看clang为IR和调试元数据发出的内容。确保使用DIBuilder类来处理大多数事情,并注意位置是如何附加到IR级别指令的。其中大部分代码位于clang/lib/CodeGen/CGDebugInfo.cpp中。
希望这对您有所帮助,如果您有任何问题,可以在llvm-dev或cfe dev邮件列表上询问。
发布于 2014-04-03 19:03:10
LLVM already supports dwarf-like annotations in the IR,在编译时,会在二进制文件中生成dwarf部分。所有的优化都试图保留这些信息,尽管并不总是有保证的。
https://stackoverflow.com/questions/22834645
复制相似问题