调试.DMP时,Visual Studio 2008不加载符号

我试图从一个.DMP文件调试一个C#应用程序,并且我有一个名为“MyFolder”的文件夹中的可执行文件,DLL和PDB。 我将包含源代码的目录设置为C: MyFolder ,但是当我尝试调试时,它告诉我:

“任何调用堆栈帧都不加载符号,源代码无法显示。”

当我打开符号加载信息时,它声明无法找到以下PDB:

C: Windows System32 kernel32.pdb:找不到或打开PDB文件。
C: MyFolder kernel32.pdb:找不到或打开PDB文件。
C: MyFolder symbols dll kernel32.pdb:无法找到或打开PDB文件。
C: MyFolder dll kernel32.pdb:找不到或打开PDB文件。
C: MyFolder kernel32.pdb:找不到或打开PDB文件。
C: Windows symbols dll kernel32.pdb:无法找到或打开PDB文件。
C: Windows dll kernel32.pdb:找不到或打开PDB文件。
C: Windows kernel32.pdb:找不到或打开PDB文件。

我的PDB位于正确的文件夹中,并且具有完全相同的时间和日期的时间戳。 有人知道这里发生了什么吗? 加载符号的正确方法是什么?

如何验证我的应用程序的符号是否实际加载(以消除它们作为问题)? 我检查了模块,它看起来像所有的DLL和我的项目的可执行文件无法加载符号,具体来说符号状态是“符号文件中没有本地符号”...当我右键点击该项目,我选择“Load Symbols From - > Symbol Path”,然后选择PDB C: MyFolder MyApplication.pdb,然后告诉我“MyApplication.pdb的符号文件与模块不匹配。”


这听起来像转储文件是一个本地代码小型转储,而不是托管代码小型转储,因为所有这些DLL的符号通常不是托管调试的关键,除非您调试混合模式应用程序,调试到Win32调用或跨调试托管/非托管边界。

这取决于如何创建小型转储。 如果它位于不同的操作系统或Service Pack上的另一台计算机上,则可能需要设置符号路径以从另一台计算机获取系统DLL的确切PDB,而不是您的应用程序assmeblies和符号。 如果这些非托管符号正确,您的托管调试体验将会得到改善。 为了使.NET的“微版本”和原生图像更加复杂化,以应对堆栈跟踪工作。


您必须确保:

  • 可执行文件/ DLL和PDB具有相同的版本。 PDB内部使用GUID来确定相关的EXE / DLL是否正确。 否则,它不会加载符号。 这不是VS本身,而是来自DbgHelp.DLL。
  • 确保你使用源文件集是绝对正确的。 即使“VS源文件必须匹配”选项未在VS Debugging选项中设置 ,VS在加载.DMP文件时并不在意 - 如果源文件不匹配,VS不会加载符号。
  • 链接地址: http://www.djcxy.com/p/95385.html

    上一篇: Visual Studio 2008 not loading symbols when debugging a .DMP

    下一篇: Debug symbols not found for static lib in Visual C++ 2008