当分析核心文件时,我的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 ?? ()
OS体系结构是SUN Solaris 10 SPARC。
问题:
答案 0 :(得分:0)
问题可以在你的程序中的gdb中。 我建议将gdb更新到最新版本(7.3.1)。另外,创建简单的测试程序并使用gdb分析其核心可能会有所帮助,以确保您的实用程序正常工作。
“gregset”和其他错误表明gdb无法从核心文件中读取数据。如果你的程序疯狂并且损坏了堆栈,就会发生这种情况。 gregset错误意味着gdb无法从核心文件中读取通用寄存器集。 fpregset用于浮点寄存器集。预期的寄存器大小取决于平台。
如果你无法正确阅读核心文件,bt将无法正常工作。
答案 1 :(得分:0)
当我尝试在Solaris 10上使用gdb 7.6.2处理64位核心转储时,我也有fpregset警告(并且没有堆栈跟踪)。原因似乎是,Solaris 10的用户空间应用程序是使用默认为32位 - 并且不支持64位核心cump。
GDB的IRC频道中的人给了我以下参数:
--enable-64-bit-bfd
我还编译了64位版本的gdb(-m64),但这不是必需的。现在gdb可以在64位核心转储上工作并创建堆栈跟踪而不会发出任何警告。