我使用pstack分析Solaris中的核心转储文件

我还能如何分析solaris的核心转储?

可以使用哪些命令来执行此操作?

转储中还有哪些其他信息?

有帮助吗?

解决方案

您可以使用Solaris模块化调试器,mdb或dbx。 mdb附带SUNWmdb(或64位版本的SUNWmdb x)包。

核心文件是崩溃时正在运行的进程的映像。

根据您的应用程序是否使用调试标志进行编译,您将能够查看堆栈的图像,从而知道导致核心的函数,以获取传递给该函数的参数的值,变量的值,分配的内存区域......

在最近的solaris版本中,您可以使用coreadm命令配置核心文件包含的内容;例如,您可以拥有进程附加到的映射内存段。

请参阅 MDB文档 dbx文档。一旦您了解了基本知识, GDB快速参考卡也很有用。 GDB。

其他提示

我想这个问题的答案应该从简单的食谱开始:

对于dbx,配方是:

% dbx a.out core
(dbx) where
(dbx) threads
(dbx) thread t@3
(dbx) where

如果核心转储来自您编写或构建的程序,则使用通常用于调试正在运行的应用程序的调试器。他们都应该能够加载核心文件。如果您对调试器没有挑剔,并且您正在使用Solaris,我建议使用dbx。它将有助于获得带有补丁的最新FCS版Sun Studio,或者最新的Sun Studio Express版本。如果您可以将核心文件加载到创建核心文件的同一系统上的调试器中,这也非常有用。如果库中的代码与创建核心文件时的代码不同,那么堆栈跟踪在通过库时将没有用处。调试器还使用OS辅助库来理解libthread和运行时链接器数据结构,因此如果需要在不同的机器上加载核心文件,则需要确保OS上安装的辅助库与系统数据结构相匹配。操作系统。您可以在几年前撰写的白皮书中找到有关这些系统库的所有想法。

http://developers.sun.com/solaris/articles/DebugLibraries /DebugLibraries_content.html

我建议首先尝试gdb,因为在我看来,它比基本的Solaris调试器更容易学习基本任务。

可以使用GDB。

它可以提供在转储之前尝试的调用。

http://sourceware.org/gdb/

http://en.wikipedia.org/wiki/GDB

让源代码很好,如果你可以更好地重现错误,你可以使用它来调试它。

过去对我很有帮助。

pflags 命令对于确定核心转储时每个线程所处的状态也很有用。通过这种方式,您可以经常查明问题。

使用dbx调试器附加到过程映像:

dbx [executable_file_name] [coredump_file_name]

重要的是,自从核心被转储后,可执行文件没有任何变化(即它没有被重建)。

您可以看到堆栈跟踪以查看程序在dbx命令“where”中崩溃的位置。

您可以使用命令“up”向上和向下移动堆栈。和“向下”,或用“frame [number]”跳转到精确的堆栈帧,并在“where”的输出中看到数字。

您可以使用“print [expr]”打印变量或表达式的值。命令。

玩得开心。

我在

上的solaris x86盒子上找到了dbx
/opt/SUNWspro/bin/dbx

干杯!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top