gpt4 book ai didi

llvm::DIInstruction getFilename 返回带有目录的文件名,我只想要文件名

转载 作者:行者123 更新时间:2023-12-01 16:15:44 26 4
gpt4 key购买 nike

我正在尝试使用 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 如果这很重要。

最佳答案

我认为这取决于编译器的调用。如果你运行:

clang -c somedir/somefile.c

然后全 somedir/somefile.c将是文件名。

你的调用看起来如何?

这没有什么奇怪的。调试器将查找与某个项目根目录相关的源文件,如果您编译这样的文件,就会以这种方式找到它们。 gcc 做同样的事情:
/tmp$ pwd
/tmp
/tmp$ cat subdir/test.c
int foo() {
return 42;
}

/tmp$ gcc -g -O0 -c subdir/test.c -o test.o
/tmp$ readelf --debug-dump=info test.o | grep -A4 compile_unit
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
<c> DW_AT_producer : (indirect string, offset: 0x0): GNU C 4.6.3
<10> DW_AT_language : 1 (ANSI C)
<11> DW_AT_name : (indirect string, offset: 0xc): subdir/test.c
<15> DW_AT_comp_dir : (indirect string, offset: 0x1a): /tmp

关于llvm::DIInstruction getFilename 返回带有目录的文件名,我只想要文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14166004/

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