gpt4 book ai didi

c - DWARF 行表中的源列号

转载 作者:太空狗 更新时间:2023-10-29 15:35:48 28 4
gpt4 key购买 nike

对于 C/C++ 源文件中的任何元素,我希望能够在其编译的可执行文件中确定相应的内存位置。通过调试进行编译并使用生成的 DWARF 信息对实现这一目标大有帮助,但离我的目标还差得很远。 GCC 生成的 DWARF .debug_line 信息似乎只有行号,列号为 0! DWARF 规范允许指定列号,但 GCC 似乎没有生成它们,这对我来说似乎很奇怪。

我是否遗漏了什么 - 也许是一些配置或命令行参数让 GCC 知道我想要调试信息中的列?或者也许有一种完全不同的方法来实现我的目标?

下面是一段简单的代码,用于演示 DWARF 中缺少列号:

int f(int x)
{
x = 0; x++;
return x;
}

编译:

gcc -g -c test.c

然后查看 DWARF 信息:

dwarfdump -l test.o

这是输出:

.debug_line: line number info for a single cu
Source lines (from CU-DIE at .debug_info offset 0x0000000b):

<pc> [row,col] NS BB ET PE EB IS= DI= uri: "filepath"
NS new statement, BB new basic block, ET end of text sequence
PE prologue end, EB epilogue begin
IA=val ISA number, DI=val discriminator value
0x00000000 [ 2, 0] NS uri: "test.c"
0x00000007 [ 3, 0] NS
0x00000012 [ 4, 0] NS
0x00000015 [ 5, 0] NS
0x00000017 [ 5, 0] NS ET

最佳答案

GCC 不会在 DWARF 中生成列号。可以做到,但是没有人提供补丁来做到这一点。如果您有兴趣,GCC 的 DWARF 生成代码(几乎)都在 gcc/dwarf2out.c 中。

关于c - DWARF 行表中的源列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21742584/

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