题
我使用pstack分析Solaris中的核心转储文件
我还能如何分析solaris的核心转储?
可以使用哪些命令来执行此操作?
转储中还有哪些其他信息?
其他提示
我想这个问题的答案应该从简单的食谱开始:
对于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://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
干杯!