我有一个cpp文件和使用clang 9的位代码。现在,我从源代码中选择一个cpp行号,我想获取此源代码行的LLVM位代码行号,而不是手动对位进行反汇编代码文件并逐行读取文件。请告诉我是否可行以及如何实现。
答案 0 :(得分:0)
可能没有一组与该确切行明显对应的IR指令...但是大多数情况下都是可能的。有一个名为Instruction::getDebugLoc()的函数,如果该函数完全返回任何内容,则该函数返回该特定指令的文件名和行号。您可以使用它。
但是出于两个原因,您需要做好一些猜测的准备。
如果一条指令来自第42行,而下两条指令没有明显的原点,那么第43行就有一条指令,则必须决定对这两条指令之间的处理方式。没有一般性的答案,这取决于您的需求。
如果特定的C ++行调用了内联函数或宏,则所报告的行很可能位于内联函数或宏中。这也许适合您。
getDebugLoc()要求您使用调试信息进行编译。即使您使用完整的调试信息进行编译,它也不能始终返回原点,因为指令在源代码中并不总是具有清晰唯一的原点。例如,在C ++中,此代码要求行}
调用Bar::~Bar()
:
if(foo) {
Bar b(42);
b.quuz();
}
但是{
和}
是可选的,这是合法的:
if(foo)
Bar b(42);
即使没有任何代码行,编译器也必须调用Bar::~Bar()
。您可以说~Bar()
调用的起源是一种语言规则,而不是源代码中的任何位置。