gpt4 book ai didi

c++ - LLVM如何获取调用站点文件名和行号

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:14 25 4
gpt4 key购买 nike

我对 LLVM 非常陌生,这是我第一次写 C++

我需要找到几个与 LLVM CallSite 相关的函数信息,但是,我已经检查了这里的源代码:LLVM CallSite Source Code

仍然不知道从哪里获取调用站点文件名(例如 CallSite 在 example.c 文件中),调用站点行号(例如在行整个程序18个)

您知道如何获取调用站点文件名和行号吗?

最佳答案

您可以通过从被调用函数中检索调试信息来获取此信息。算法如下:

  1. 您需要获取底层调用值,这是一个函数。
  2. 然后您需要获取附加到该函数的调试信息。
  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();
}

请注意休息。它们在这里表明每一步都可能不会成功,因此您应该准备好处理所有此类情况。

关于c++ - LLVM如何获取调用站点文件名和行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41714172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com