我对LLVM非常陌生,这是我第一次编写C ++
我需要找到几个与LLVM CallSite相关的函数信息,但是,我在这里检查了源代码:LLVM CallSite Source Code
仍然不知道从哪里获取呼叫站点文件名(例如,CallSite在example.c文件中),呼叫站点行号(例如,在线整个计划中的18个)
您知道如何获取呼叫站点文件名和行号吗?
答案 0 :(得分:3)
您可以通过从被调用函数中检索调试信息来获取此信息。算法如下:
这是一个应该完成工作的代码(虽然我没有运行它):
CallSite cs = ...;
if (!cs.isCall() && !cs.isInvoke()) {
break;
}
Function *calledFunction = dyn_cast<Function>(cs.getCalledValue());
if (!calledFunction) {
break;
}
MDNode *metadata = calledFunction->getMetadata(0);
if (!metadata) {
break;
}
DILocation *debugLocation = dyn_cast<DILocation>(metadata);
if (debugLocation) {
debugLocation->getFilename();
debugLocation->getLine();
}
请注意休息时间。他们在这里表明每一步都可能不会成功,所以你应该准备好处理所有这些情况。