我正在尝试使用 DILocation 类从 llvm 指令中获取调试元数据。
但是,当我在 DILocation 中查询指令来自的文件名时,我会得到一个文件名,其中的目录标记在前面。
我虽然它只会返回文件,并且应该通过调用 getDirectory() 来检索整个目录路径。
例如,我最终得到 pbg/XMain_0.c 而不是 XMain_0.c
我像这样编译了我的位码:
XMain_0.o: pbg/XMain_0.c
$(CC) <snip> -c pbg/XMain_0.c
我在源文件中传递了一个目录这一事实是否意味着元数据将源文件名保存为输入?
这是一个精简的例子:
const llvm::Instruction* inst //passed in
MDNode *n = inst->getMetadata("dbg");
DILocation loc(n);
file = loc.getFilename().str(); // => pbg/XMain_0.c
dir = loc.getDirectory().str(); // => /projects/pbg/pbg-m/DIR
我可以打电话来“规范化”这些数据还是我需要手动完成?
如果重要的话,Clang 3.1。