2012-01-13 50 views
0

reWhen分析核心文件尺寸错误fpregset,我GDB 7.0输出几个警告: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。

问题:

  1. 什么是这些警告的原因/原因是什么?
  2. 为什么我不能检索回溯?
  3. 如何解决这些问题?

回答

0

该问题可以在gdb以及您的程序中。 我会建议将gdb更新到最新版本(7.3.1)。此外,创建简单的测试程序并使用gdb分析其核心可能会有所帮助,以确保您的实用程序正常工作。

“gregset”等错误表明gdb无法读取核心文件中的数据。如果你的程序变得疯狂并且损坏了堆栈,它可能会发生。 gregset错误意味着gdb无法从核心文件读取通用寄存器集。 fpregset用于浮点寄存器集。期望的寄存器大小取决于平台。

如果您不能正确读取核心文件,bt将不起作用。

0

当我尝试在Solaris 10上使用gdb 7.6.2处理64位核心转储时,我也有fpregset警告(并且没有堆栈跟踪)。原因似乎是,编译Solaris 10的用户空间应用程序32位默认 - 并且不支持64位核心转储。

在GDB的IRC频道的家伙给了我下面的参数:

--enable-64-bit-bfd 

我还编GDB(-m64)的64位版本,但不应该是必要的。现在,gdb可以在64位内核转储上工作,并创建没有任何警告的堆栈跟踪。