【发布时间】:2016-09-13 16:44:10
【问题描述】:
在linux机器上,我们编译的时候,比如下面这段代码:
b.cc:
typedef struct sTeste {
int campo1;
char campo2;
int campo3;
} T_TESTE;
void m1(T_TESTE *p) {
}
使用命令:
gcc -gdwarf-2 -c b.cc -o b.o
我们得到 ELF 标头
root@marceloaleks:~# hd b.o |head 00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| 00000010 01 00 3e 00 01 00 00 00 00 00 00 00 00 00 00 00 |..>.......| 00000020 00 00 00 00 00 00 00 00 a8 03 00 00 00 00 00 00 |......| 00000030 00 00 00 00 40 00 00 00 00 00 40 00 14 00 11 00 |....@.....@.....| 00000040 55 48 89 e5 48 89 7d f8 5d c3 00 00 b1 00 00 00 |UH..H.}.]........| 00000050 02 00 00 00 00 00 08 01 00 00 00 00 04 00 00 00 |......| 00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |......| 00000070 00 00 00 00 00 00 00 00 00 02 00 00 00 00 0c 01 |......| 00000080 01 64 00 00 00 03 00 00 00 00 01 02 64 00 00 00 |.d......d....| 00000090 02 23 00 03 00 00 00 00 01 03 6b 00 00 00 02 23 |.#........k....#|00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
但是,当我们在 Windows 上执行相同操作时,结果是:
C:\Aleks-IOT\Code\Dev\JAVA\nbdwarfdumplib>xxd b.o |head 00000000: 6486 0d00 0000 0000 ae05 0000 1c00 0000 d....... 00000010:0000 0400 2e74 6578 7400 0000 0000 0000 .....文本...... 00000020: 0000 0000 1000 0000 1c02 0000 0000 0000 ...... 00000030: 0000 0000 0000 0000 2000 5060 2e64 6174 ........ .P`.dat 00000040: 6100 0000 0000 0000 0000 0000 0000 0000 ......我真正的问题是我只想从一个简单的编译单元(在本例中为 b.cc)提取 dwarf 调试数据。
有什么线索吗?
谢谢
【问题讨论】:
-
你有 Windows 10 64 位吗?您可以尝试Ubuntu on Windows,它可以让您在 Windows cmd 或 powershell 窗口中构建和运行 ELF 二进制文件。这是预览质量 - 我只使用
apt-get得到了 BSOD - 但它有效。 -
我试试
标签: c++ debugging gcc compilation dwarf