如何解决调试符号是什么样的?
| gcc(GCC)4.6.0 GNU gdb(GDB)Fedora(7.2.90.20110525-38.fc15) 我最近在尝试使用gdb调试问题时遇到问题。当我加载二进制文件时,gdb抱怨“找不到调试符号” 因此,当我执行以下操作时:nm ass1
我得到以下输出(仅示例)
00000000006026e0 t __init_array_end
00000000006026d0 t __init_array_start
00000000004020e0 T __libc_csu_fini
0000000000402050 T __libc_csu_init
U __libc_start_main@@GLIBC_2.2.5
00000000006029ec A _edata
0000000000602b28 A _end
000000000040212c T _fini
0000000000401420 T _init
0000000000401610 T _start
U atoi@@GLIBC_2.2.5
000000000040163c t call_gmon_start
0000000000602b10 b completed.5886
00000000006029e8 W data_start
0000000000602b18 b dtor_idx.5888
00000000004016d0 t frame_dummy
00000000004016f4 T main
问题是我忘了添加-g。因此,我决定使用-g进行编译,然后再次运行nm。我得到了类似的输出,其中包含我使用的-g调试符号,而gdb这次没有抱怨:
U __libc_start_main@@GLIBC_2.2.5
00000000006029ec A _edata
0000000000602b28 A _end
000000000040212c T _fini
0000000000401420 T _init
0000000000401610 T _start
U atoi@@GLIBC_2.2.5
000000000040163c t call_gmon_start
0000000000602b10 b completed.5886
00000000006029e8 W data_start
0000000000602b18 b dtor_idx.5888
00000000004016d0 t frame_dummy
00000000004016f4 T main
w pthread_cancel
除了二进制文件更大。我可以注意到使用nm有什么不同。我想知道我要寻找什么?调试符号是什么样的?
非常感谢您的任何建议,
解决方法
nm
默认情况下隐藏调试符号。使用-a
选项显示它们。
现代系统通常本身并不使用调试符号。 “ 5”调试格式是为与“ 6”格式可执行文件一起使用而开发的,该可执行文件只能表示有限的内部结构。这导致在符号表中隐藏了很多东西,例如调试符号和初始化程序/构造函数。 COFF(现在已经过时)和ELF文件格式允许使用任意部分,并且大多数现代Linux发行版都将gcc
配置为使用DWARF 2调试信息。您应该能够使用GNU objdump检查该信息。
(我似乎无权使用binutils
会生成stabs
或GNUstabs+
格式的计算机,因此,我将详细介绍给Google。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。