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

C++ 当提供windows.dmp或.minidmp时,如何识别(并访问)要使用的模块/调试符号,c++,module,symbols,dump,minidump,C++,Module,Symbols,Dump,Minidump,在某种程度上,从 从random customer收到转储文件后,运行调试会话以查看崩溃,您通常会发现它位于MS或其他第三方库中。下一个问题是,您可能对PC设置的了解程度不够,无法确保您拥有可用的实际模块 例如,我目前一直在尝试为ntdll.dll(5.01.2600.5512)加载符号。在MSVC 2005中,“模块列表”窗口中的“路径”列在完全路径文件名前显示*并拒绝加载我为XP/SP1/SP1a/SP2/SP3下载的符号 我有symbol server设置,可以从internet下载并存储

在某种程度上,从

从random customer收到转储文件后,运行调试会话以查看崩溃,您通常会发现它位于MS或其他第三方库中。下一个问题是,您可能对PC设置的了解程度不够,无法确保您拥有可用的实际模块

例如,我目前一直在尝试为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 设置\u NT\u SYMBOL\u PATH=srv*d:\SymbolCache*\\server1\Third Party PDB;srv*d:\SymbolCache*\\server2\Windows\Symbols*http://msdl.microsoft.com/download/symbols
也许我有错误的符号,但由于新符号没有下载,我下一步该去哪里?我是否必须联系客户并询问他们安装了什么SP以及其他修补程序?我是否必须安装该计算机,然后使用dmp文件运行调试器以获取所需的符号?

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

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

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

迷你转储中应该有足够的信息来正确解析系统dll符号。您使用的是本地下载的符号还是

更新:您应该能够将公共microsoft符号存储添加到工具->选项->调试->符号->符号文件(.pdb)位置,然后通过右键单击模块窗口中的模块手动加载符号,如果没有自动加载,则手动加载符号


还可能(可能)VS 2005没有查看
\NT\u SYMBOL\u路径来解析小型转储符号。

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

迷你转储中应该有足够的信息来正确解析系统dll符号。您使用的是本地下载的符号还是

更新:您应该能够将公共microsoft符号存储添加到工具->选项->调试->符号->符号文件(.pdb)位置,然后通过右键单击模块窗口中的模块手动加载符号,如果没有自动加载,则手动加载符号

还可能(可能)VS 2005没有查看
\u NT\u SYMBOL\u路径来解析小型转储符号。

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

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

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

包含可能也有用的信息。

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

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

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

包含也可能有用的信息。

如果在命令提示符中键入“
设置\u NT\u SYMBOL\u PATH=srv…”
,则需要考虑两件事:

  • cmd.exe
    set
    命令不会忽略空格,因此它定义了一个名为“
    \u NT\u SYMBOL\u PATH
    ”的变量,而不是“
    \u NT\u SYMBOL\u PATH
  • 必须作为该命令提示符的子级启动调试器。但是,如果使用“控制面板”设置持久性环境变量,或者使用
    setx
    命令(在Windows Vista中),则不必执行此操作