ntdll.dll 没有 PDB 文件

Posted

技术标签:

【中文标题】ntdll.dll 没有 PDB 文件【英文标题】:no PDB file for ntdll.dll 【发布时间】:2012-11-14 16:27:16 【问题描述】:

尝试调试我正在开发的 dll 项目。我在尝试使用主机应用程序加载此 dll 时收到消息框 Debugging information for 'ntdll.dll' cannot be found or does not match. Cannot find or open the PDB file。如何解决这个问题?

经过一些实验并将 VS2010 设置为从服务器获取符号后,我在构建 dll 时收到以下消息:

DEMO.exe':已加载“C:\Windows\System32\ntdll.dll”,已加载符号(已删除源信息)。 DEMO.exe':已加载“C:\Windows\System32\mscoree.dll”,已加载符号(已删除源信息)。 DEMO.exe':加载了'C:\Windows\System32\kernel32.dll',加载了符号(源信息被剥离)。 DEMO.exe': 加载'C:\Windows\System32\KernelBase.dll',加载符号(源信息被剥离)。

但在运行调试时仍然描述了消息框。

【问题讨论】:

您是否使用Microsoft Symbol Server 来获取调试符号文件?如果是这种情况,可能包括 ntdll.dll 在内的某些文件尚未下载。请参阅此处 (support.microsoft.com/kb/311503) 了解更多信息。 我是 Symbol Server 的新手。我正在使用默认的 VS2010 专业安装。我只是想知道为什么从同一张 CD 安装的另一台装有 Visual Studio 的机器没有出现这些消息。 我更新了问题描述。我已下载所需的 PDB 文件,但仍有问题。 您忘记准确描述您为访问此消息框所做的工作。很可能您实际上遇到了异常,并且调试器正试图向您展示发生了什么。由于您没有 Windows 操作系统的源代码,因此无法这样做。异常的下一个可能原因是您的程序正在破坏堆。在“输出”窗口中查看诊断消息。 下载的符号包不如 Microsoft 符号服务器有用,因为 Windows 更新经常修改 ntdll.dll 和其他系统 DLL,这意味着下载的 PDB 已过期。使用符号服务器。 【参考方案1】:

您可以有多种选择。

    下载微软提供的符号包。这将为所有系统库下载 PDB。将其解压缩到“c:\symbolcache” 将符号路径设置为 SRV*c:\symbolcache*http://msdl.microsoft.com/download/symbols。在这种情况下,这将下载 PDB 文件并将其存储到“c:\symbolcache”(如果不存在)。

然后您必须将“c:\symbolcache”设置为符号文件路径到您正在使用的任何故障转储分析工具中。

【讨论】:

以上是关于ntdll.dll 没有 PDB 文件的主要内容,如果未能解决你的问题,请参考以下文章

“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开PDB文件的原因?

解决“C:WindowsSystem32 tdll.dll”。无法查找或打开 PDB 文件问题

VS2012 每次编译程序都会出现3个无法查找或打开 PDB 文件。

有没有办法让Windows 7 x64从本地目录加载ntdll.dll,而不是system32?

MFC 应用程序在 NTDLL.dll 中崩溃

vs2012 输出窗口报错 “无法查找或打开 PDB 文件”