我发现文件> = 5.30 或 gcc> = 6.3 已经改变了它的行为。当我编译一个像hello-world这样的基本程序时, file 的输出表明elf-executable包含某种“debug_info”。
来源:
#include <iostream>
using namespace std;
int main(int argc, char* argv []) {
cout << "Hello world.\n";
return 0;
}
编译:
$ g++ -o hello hello.cpp # notice, no option "-g"
检查:
$ file hello # please scroll to the right hand-side, it is at the very end
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=d03b68ed8618fcb97094b18157054f7cc2030f3c, not stripped, with debug_info
我不熟悉 readelf 。一个 readelf -S你好| grep -i debug 表示没有“-g”编译时没有调试信息。如果使用选项“-g”进行编译,我会看到这一点,这对我来说很合适:
[27] .debug_aranges PROGBITS 0000000000000000 0000107c
[28] .debug_info PROGBITS 0000000000000000 000010ac
[29] .debug_abbrev PROGBITS 0000000000000000 000038ce
[30] .debug_line PROGBITS 0000000000000000 00003e54
[31] .debug_str PROGBITS 0000000000000000 00004186
我假设在构建 gcc 版本期间没有人使用隐藏的configure-flag,总是包含某种调试信息。所以util 文件的行为可能已经改变了。 file 对“调试信息”有什么意义?
的信息:
我在X86_64上运行GNU / Linux(Archlinux),包都是最新的。