2017-04-03 162 views
0

我的操作系统是Arch Linux,而test.c程序很简单:为什么在编译期间文件命令报告“没有剥离,带有debug_info”的可执行文件没有“-g”选项?

# cat test.c 
#include <stdio.h> 

int main(void) { 
     printf("Hello world!\n"); 
} 

编译它没有-g选项,并使用file命令检查可执行文件的信息:

# gcc test.c 
# file a.out 
a.out: 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]=c7a538046222b5209d2daafbfc246de341a652d9, not stripped, with debug_info 

file命令输出“not stripped, with debug_info”,但我在编译期间不使用-g选项。使用gdb调试a.out

# gdb a.out 
GNU gdb (GDB) 7.12.1 
Copyright (C) 2017 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "x86_64-pc-linux-gnu". 
Type "show configuration" for configuration details. 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>. 
Find the GDB manual and other documentation resources online at: 
<http://www.gnu.org/software/gdb/documentation/>. 
For help, type "help". 
Type "apropos word" to search for commands related to "word"... 
Reading symbols from a.out...(no debugging symbols found)...done. 
(gdb) 

我可以看到gdb也提示 “Reading symbols from a.out...(no debugging symbols found)...done.”。

为什么file命令在编译期间报告“not stripped, with debug_info”的可执行文件没有“-g”选项?

+0

仍然是最小的信息,可用于调试(全局函数和变量名)。您可以使用strip命令删除它们。 –

回答

0

为什么在编译期间文件命令报告“没有剥离,带debug_info”的可执行文件没有“-g”选项?在libc_nonshared.a(例如C运行时启动ctr0.o),其可以含有一些调试信息的部件

你的程序的链接。

你可以看到调试信息可用,并猜测它与传来:

readelf -wl ./a.out 
+1

'readelf -wl。/ a.out'不输出任何内容。 –

相关问题