use*_*729 16 gdb symbol-tables executable-format
当我尝试调试可执行文件时:
(gdb) break +1
No symbol table is loaded. Use the "file" command.
Run Code Online (Sandbox Code Playgroud)
这究竟是什么意思?
符号表是否附加到可执行文件?
nat*_*ose 22
gdb使用两组符号.
-g set是调试符号,它使事情变得更容易,因为它们允许您在调试时查看代码并查看变量.
编译时默认包含另一组符号.这些是链接符号,并且存在于ELF(可执行链接格式)符号表中.这包含的信息少于调试符号,但包含最重要的内容,例如可执行文件(或库或目标文件)中的内容的地址.没有这些信息,gdb甚至不知道main在哪里,所以(gdb) break main会失败.
如果您没有调试符号(-g),那么您仍然可以,(gdb) break main但是gdb将不会在源文件中包含任何代码行的概念.当您尝试单步执行代码时,您一次只能提前1台机器指令,而不是一次一行.
strip命令通常用于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
$
Run Code Online (Sandbox Code Playgroud)
这是因为你没有打开调试编译.试试gcc -g file.c
| 归档时间: |
|
| 查看次数: |
27081 次 |
| 最近记录: |