1

我在一家软件公司工作,开发系统软件产品。前天该产品崩溃并显示核心。

为了找出确切的问题,我想知道带有函数名称的完整核心堆栈(kernel32.dll、ntdll.dll .. 不显示函数名称)。我已经从 Microsoft 站点下载了 WINDOWS 调试符号。 http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx#f

下载了以下三个包 1. WindowsServer2003-KB933548-v1-ia64-symbols-NRL-ENU.exe 2. WindowsServer2003-KB933548-v1-x86-symbols-NRL-ENU.exe 3. WindowsServer2003-KB933548-v1-x86-symbols- NRL-ENU-DEBUG.exe。

尝试为 WINDOWS 操作系统二进制文件加载调试符号,但我无法成功。示例:对于 ntdll.dll,我尝试加载相应的 ntdll.pdb,但 Visual Studio 出现错误,即“符号文件 ntdll.pdb 与模块不匹配”

操作系统:我使用的是 WINDOWS 2003 SP2 。

请帮助获得带有函数名称的完整堆栈。

我的系统软件崩溃后的核心堆栈。

kernel32.dll!77e4bef7() Asm [下面的帧可能不正确和/或丢失,没有为 kernel32.dll 加载符号] Asm kernel32.dll!77e4bef7() Asm kernel32.dll!77e46cfd() Asm ntdll.dll!7c827d29( ) Asm ntdll.dll!7c83d266() Asm ntdll.dll!7c83d2b1() Asm ntdll.dll!7c82d308() Asm ntdll.dll!7c82d30f() Asm ntdll.dll!7c82f380() Asm ntdll.dll!7c82d30f() Asm ntdll.dll!7c82f557() Asm ntdll.dll!7c82a501() Asm ntdll.dll!7c82daee() Asm ntdll.dll!7c82f51a() Asm ntdll.dll!7c82f2c3() Asm kernel32.dll!77e6518d() Asm ntdll。 dll!7c829cc2() Asm ntdll.dll!7c829de7() Asm ntdll.dll!7c829e02() Asm ntdll.dll!7c827899() Asm ntdll.dll!7c82ec4a() Asm msvcr80.dll!781787e4() Asm msvcr80.dll! 78178823() Asm sal.dll!SAL_DebugOutput(const char * fmtstr=0x66009318, ...) 第 643 行 C++ sal.dll!MapSystemError(unsigned long dwerr=0x00000040) 第 130 行 + 0xb 字节 C++

sal.dll!MapLastError() 第 146 行 + 0xc 字节 C++

sal.dll 是我的软件二进制文件,我能够为 sal.dll 加载调试符号。

我在等你的建议。

4

1 回答 1

2

您将希望使用符号服务器来获取此信息,而不是下载静态集。(静态设置很快就会因维修而过时。)

这是一篇关于使用 Symbol Server 的知识库文章:http: //support.microsoft.com/kb/311503

Visual Studio 和 Windbg 对此都有支持。

于 2010-01-13T19:15:40.520 回答