0

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. 如何解决这些问题?
4

2 回答 2

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 位核心转储上工作并创建堆栈跟踪而不会出现任何警告。

于 2013-12-23T18:39:45.223 回答
0

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

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

如果您无法正确读取核心文件,bt 将无法正常工作。

于 2012-01-13T13:17:41.530 回答