代码之家  ›  专栏  ›  技术社区  ›  Greg Domjan

当提供windows.dmp或.minidmp时,如何识别(并访问)要使用的模块/调试符号

  •  1
  • Greg Domjan  · 技术社区  · 17 年前

    在某种程度上,从 reading a windows *.dmp file

    例如,我目前一直在尝试为ntdll.dll(5.01.2600.5512)加载符号。在MSVC 2005中,“模块列表”窗口中的“路径”列在完全路径文件名前显示*并拒绝加载我为XP/SP1/SP1a/SP2/SP3下载的符号。

    我有symbol server设置,可以从internet下载并存储在本地缓存中,对于我的PC上的模块,该缓存似乎工作正常。 使用与该方法等价的GUI

    Set _NT_SYMBOL_PATH=srv*d:\SymbolCache*\\server1\Third-Party-PDB;srv*d:\SymbolCache*\\server2\Windows\Symbols*http://msdl.microsoft.com/download/symbols
    

    也许我有错误的符号,但由于新符号没有下载,我下一步该去哪里?我是否必须联系客户并询问他们安装了什么SP以及其他修补程序?我是否必须安装该机器,然后使用dmp文件运行调试器以获得所需的符号?

    4 回复  |  直到 9 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    如果您使用的是WinDbg(系统的一部分 Debugging Tools for Windows 软件包),然后让它自动从Microsoft为您提取正确的符号就很简单了。使用“.symfix”(或“.symfix+”命令配置符号路径,只需附加到现有的符号搜索路径)命令。

    完成此操作并在WinDbg中加载崩溃转储后,键入“.reload/f”以使WinDbg重新加载符号。它将使用转储文件本身中的信息从Microsoft的公共符号服务器中提取正确的符号,而不管您的计算机上有什么DLL。

    如果在执行此操作后,由于某些原因符号无法正确加载,请在WinDbg的命令窗口中输入“!sym noise”,然后重新加载符号。当WinDbg尝试加载它们时,您将看到它输出搜索/加载过程中遇到的任何错误。这些错误消息将帮助您进一步诊断出现了什么问题以及为什么没有加载正确的符号。

    This post 具有也可能有用的信息。

        2
  •  1
  •   bk1e    17 年前

    Set _NT_SYMBOL_PATH = srv... “在命令提示符中,有两件事需要考虑:

    • cmd.exe set 命令不忽略空白,因此定义了一个名为 _NT_SYMBOL_PATH “,不是” _NT\u符号\u路径 ".
    • 必须作为该命令提示符的子级启动调试器。但是,如果使用控制面板设置持久性环境变量,或者使用 setx

    如果以其他方式设置符号路径,则不适用。

        3
  •  0
  •   Tim Cooper    14 年前

    您使用什么调试小型转储?即WinDBG或Visual Studio?小型转储是如何生成的?

    迷你转储中应该有足够的信息来正确解析系统dll符号。您是否使用本地下载的符号或符号 http://msdl.microsoft.com/

    更新:您应该能够将公共microsoft符号存储添加到工具->选项->调试->符号->符号文件(.pdb)的位置,然后在“模块”窗口中右键单击模块并在未自动加载的情况下手动加载符号。

    _NT_SYMBOL_PATH 解析小型转储符号。

        4
  •  0
  •   Aaron N. Tubbs    17 年前

    请尝试按照以下说明进行操作: this kb article ,并确保您的符号路径配置正确,WinDbg有权访问它,并且ntdll符号(例如)已实际下载到符号缓存中。本文还提供了有关如何通过SymChk工具手动下载和验证缓存中的符号的说明。