re在分析核心文件时,我的gdb 7.0会输出几个警告:
warning: Wrong size gregset in core file.
warning: Wrong size fpregset in core file.
warning: Wrong size gregset in core file.
warning: Wrong size fpregset in core file.
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
我不确定它是否相关,但我无法获得回溯:
(gdb) bt
#0 0x00000000 in ?? ()
操作系统体系结构为SUN Solaris 10 SPARC。
问题:
- 这些警告的原因是什么
- 为什么我不能检索回溯
- 如何解决这些问题
问题也可能出现在gdb中的程序中。我建议将gdb更新到最新版本(7.3.1)。此外,创建简单的测试程序并使用gdb分析其核心也会很有帮助,以确保您的实用程序运行良好。
"gregset"和其他错误表明gdb无法从核心文件中读取数据。如果你的程序失控并损坏堆栈,就会发生这种情况。gregset错误意味着gdb无法从核心文件中读取通用寄存器集。fpregset用于浮点寄存器集。预期的寄存器大小取决于平台。
如果您不能正确读取核心文件,bt将不起作用。
当我尝试在Solaris 10上使用gdb 7.6.2处理64位核心转储时,我也收到了fpregset警告(并且没有堆栈跟踪)。原因似乎是,Solaris 10的用户空间应用程序默认使用32位编译,而不支持64位核心cumps。
GDB IRC频道的人给了我以下参数:
--enable-64-bit-bfd
我还编译了一个64位版本的gdb(-m64),但这应该不是必需的。现在gdb可以在没有任何警告的情况下处理64位核心转储并创建堆栈跟踪。