Debugging 为什么调试符号在LLVM编译/链接过程中丢失?

Debugging 为什么调试符号在LLVM编译/链接过程中丢失?,debugging,llvm,Debugging,Llvm,我编写了一个LLVM转换,它基本上用一种受保护的malloc和其他东西来取代malloc 我正在使用clang(或llvmgcc)编译一个c文件,以获得一个包含调试信息的位代码文件(使用-emit llvm选项)。它们还包含方法名、行号等 之后,我使用opt插入这个位代码文件。结果是一个插入指令的位代码文件,仍然包含所有相关的调试信息 在第三个也是最后一个步骤中,因为我们需要一些运行时lib,所以我们使用llvmgcc将位代码与其他一些位代码文件链接,以获得最终的二进制文件 这个二进制文件我无法

我编写了一个LLVM转换,它基本上用一种受保护的malloc和其他东西来取代malloc

我正在使用clang(或llvmgcc)编译一个c文件,以获得一个包含调试信息的位代码文件(使用-emit llvm选项)。它们还包含方法名、行号等

之后,我使用opt插入这个位代码文件。结果是一个插入指令的位代码文件,仍然包含所有相关的调试信息

在第三个也是最后一个步骤中,因为我们需要一些运行时lib,所以我们使用llvmgcc将位代码与其他一些位代码文件链接,以获得最终的二进制文件

这个二进制文件我无法调试,因为它不包含任何调试信息,尽管所有链接的位代码文件都包含这些信息。gdb唯一能告诉我的是我们在哪个函数中,但没有行号等等


如有任何提示,我将不胜感激。

据我所知,您正在运行优化(opt tool也会优化代码和调试信息)。那么,当调试是优化调试信息的结果时,您希望看到的缺失部分可能是什么呢

附言。
我会在评论中添加此项,但不幸的是,我没有50个声誉需要添加评论。

您是否将-g传递给所有接受它的步骤?尤其是最后一个llvm gcc步骤:否则-g将不会传递给链接器。是的,我将在所有步骤中添加-g选项…您如何将文件链接到一起?如果你展示一个小例子,或者其中的一部分,这会有所帮助。