如何获取 Java.exe/jvm.dll 的符号文件以分析崩溃核心转储文件?

Posted

技术标签:

【中文标题】如何获取 Java.exe/jvm.dll 的符号文件以分析崩溃核心转储文件?【英文标题】:How do I get symbol files for Java.exe/jvm.dll to analyse crash core dump files? 【发布时间】:2009-01-08 15:09:01 【问题描述】:

我有一个在 Websphere 应用服务器上运行的 Java 应用程序。当我分析系统崩溃核心转储文件时,我得到如下信息:

ERROR: Symbol file could not be found.  Defaulted to export symbols for J9THR23.dll 

如何获取 Java 的符号文件?

提前致谢。

更多细节在这里:

*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************

*** ERROR: Symbol file could not be found.  Defaulted to export symbols for J9THR23.dll - 
*************************************************************************
***                                                                   ***
***                                                                   ***
***    Your debugger is not using the correct symbols                 ***
***                                                                   ***
***    In order for this command to work properly, your symbol path   ***
***    must point to .pdb files that have full type information.      ***
***                                                                   ***
***    Certain .pdb files (such as the public OS symbols) do not      ***
***    contain the required information.  Contact the group that      ***
***    provided you with these symbols if you need this command to    ***
***    work.                                                          ***
***                                                                   ***
***    Type referenced: ntdll!_PEB                                    ***
***                                                                   ***
*************************************************************************
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for j9jit23.dll - 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for java.dll - 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for j9gc23.dll - 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for jvm.dll - 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for jclscar_23.dll - 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for j9ute23.dll - 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for J9PRT23.dll - 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for j9vm23.dll - 
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for DBGHELP.DLL - 

巩俐

【问题讨论】:

我从不查看来自 websphere 的转储。通常,应用程序日志包含确定导致 java 应用程序崩溃的所有信息。你在找什么? 【参考方案1】:

您可以在此站点上获得 JDK 的调试版本。

http://download.java.net/jdk6/

查找 jdk-6u12-ea-bin-b03-windows-i586-debug-22dec2008.jar,91.47 MB​​

它包括 .pdb 文件

【讨论】:

我相信这里提供的文件不是真正的 PDB 文件,而是 Java 二进制文件的完整版本,具有不同的编译选项,恰好包括 PDB 文件。但是这些对查看生产 JVM 中的现有转储没有帮助。【参考方案2】:

看起来调试器正在寻找 PDB 文件,据我所知,Java 应用程序的调试信息并不是 PDB 文件。 PDB 文件是由 VisualStudio 在创建 Windows 本机应用程序时生成的,因此调试器似乎正在寻找应用程序服务器的调试符号。不知道 WebSphere 是否带有自己的调试版本。另一方面,如果您想要调试 Java 应用程序的符号,您只需要使用 -g 选项重新编译它。

【讨论】:

以上是关于如何获取 Java.exe/jvm.dll 的符号文件以分析崩溃核心转储文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取目标文件中类成员的符号?

如何获取符号名称(文字)?

dtrace:如何从文件中获取符号链接目标

Aspose.Words 如何获取word每个段落的编号 或者项目符号?

如何从 automake/libtool 库中获取符号列表?

如何获取符号链接的目标?