gdb使用两组符号.
-g集合是调试符号,它使事情变得更容易,因为它们允许您在调试时查看代码并查看变量.
编译时默认包含另一组符号.这些是链接符号,并且存在于ELF(可执行链接格式)符号表中.这包含比调试符号少得多的信息,但包含最重要的东西,例如可执行文件(或库或对象文件)中的东西的地址.没有这个信息,gdb甚至不知道main在哪里,所以(gdb)break main会失败.
如果您没有调试符号(-g),那么您仍然可以(gdb)断开主,但是gdb将不会有任何源文件中的代码行的概念.当您尝试逐步完成代码时,您一次只能提前执行1个机器指令,而不是一次提前一行.
strip命令通常用于从可执行文件(或其他对象文件)中删除符号.
如果您不希望某人能够看到符号,或者如果要节省文件中的空间,则通常会使用它.符号表可以变大. Strip去除了调试符号和链接器符号,但它有几个命令行开关,可以限制它删除的内容.
如果您在程序上运行file命令,它将告诉你的一件事是天气或不可执行文件已被剥离.
$gcc my_prog.c -o my_prog
$file my_prog
my_prog: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
$strip my_prog
my_prog: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
$