Clang getMetadata(";dbg";)返回NULL,尽管生成了带";的IR;叮当声-g-S-emit llvm“;

Clang getMetadata(";dbg";)返回NULL,尽管生成了带";的IR;叮当声-g-S-emit llvm“;,clang,llvm,Clang,Llvm,我正在尝试获取指令的行信息。 我有 const CallInst*CallInst=dyn_cast(&*I); MDNode*N=callInst->getMetadata(“dbg”); N显然是空的,但我用“clang-g-S-emit llvm”编译了输入IR 有人知道为什么会这样吗?可能您的指令与源程序的任何语句都不对应,因此没有调试元数据 例如,它是由一个或另一个优化生成的,因为传递-emit llvm不仅会发出llvm,而且会首先将一系列优化应用于您的程序 要排除优化影响,并在前

我正在尝试获取指令的行信息。 我有

const CallInst*CallInst=dyn_cast(&*I);
MDNode*N=callInst->getMetadata(“dbg”);
N显然是空的,但我用“clang-g-S-emit llvm”编译了输入IR
有人知道为什么会这样吗?

可能您的指令与源程序的任何语句都不对应,因此没有调试元数据

例如,它是由一个或另一个优化生成的,因为传递
-emit llvm
不仅会发出llvm,而且会首先将一系列优化应用于您的程序

要排除优化影响,并在前端do
clang-g-S-emit llvm-mllvm-disable llvm optzns
之后查看纯代码,并确保您的指令具有所需的元数据

const CallInst* callInst = dyn_cast<const CallInst>(&*I);
MDNode *N = callInst->getMetadata("dbg");