2
我试图从使用DILocation类的llvm指令调试元数据。llvm :: DIInstruction getFilename返回一个目录的文件名,我只想要文件名
但是,当我查询指令来自的文件名的DILocation时,我得到一个带有 目录的文件名。
虽然它只会返回文件 ,并且应该通过调用getDirectory()来检索整个目录路径。
例如,而不是XMain_0.c的我结束了PBG/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
是否有电话,我可以做出“正常化”这个数据还是做我需要做手工吗?
铿锵3.1如果那件事。
正如你可以在上面的Makefile中看到的那样,我按照你的说法编译了,给它一个子目录和文件。这种行为看起来很奇怪。 –
@PaulRubel:看到我的更新 –
我可以看到这个决定对调试器编写者有什么帮助,但是在过去的一天思考这个问题,似乎getFilename()有点误导性地命名了。我可以接受目前的情况,我不确定什么是更好的名字,但是在完美的世界中,似乎会有另一个调用,像getFilenameRelativeToProjectPath(),它会执行getFilename当前的操作。好吧。 –