【发布时间】: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 已过期。使用符号服务器。
标签: visual-c++