2014-02-12 36 views
4

對於C/C++源文件中的任何元素,我希望能夠確定其編譯的可執行文件中相應的內存位置。使用調試進行編譯,並使用生成的DWARF信息可以實現這一目標,但這只是我的目標。 GCC似乎只用行號生成DWARF .debug_line信息,而將列號保留爲0!對我來說,DWARF規範允許指定列號似乎很奇怪,但GCC似乎不會生成它們。DWARF行表中的源列號

是否有我缺少的東西 - 可能是一些配置或命令行參數讓海灣合作委員會知道我想在我的調試信息列?或者也許有完全不同的方式來實現我的目標?

下面是一個簡單的代碼位,以表明在DWARF缺乏列號:

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

與編譯該:

dwarfdump -l test.o 

gcc -g -c test.c 

然後用查看DWARF信息

以下是輸出:

.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 

回答

3

GCC不發出DWARF中的列號。它可以完成,但沒有人提供補丁來做到這一點。如果你有興趣,GCC的DWARF代碼(幾乎)全部在gcc/dwarf2out.c中。