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當前的操作。好吧。 –