gdb 7.0警告:核心文件中的fpregset大小错误

gdb 7.0 warnings: Wrong size fpregset in core file

本文关键字:fpregset 错误 文件 警告 核心 gdb      更新时间:2023-10-16

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。

问题:

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

问题也可能出现在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位核心转储并创建堆栈跟踪。