.net 为什么visual studio无法加载以前存储的符号?

.net 为什么visual studio无法加载以前存储的符号?,.net,visual-studio,debugging,dump,debug-symbols,.net,Visual Studio,Debugging,Dump,Debug Symbols,我有以下奇怪的情况(至少对我来说是这样) 我在D:\Test文件夹中创建了简单的控制台应用程序。 代码如下 static void Main(string[] args) { Console.WriteLine("Dumps hello world !"); int i = 5 + 5; Console.ReadLine(); } static void Main(string[] args) { Console.WriteLine("Dumps hello w


我有以下奇怪的情况(至少对我来说是这样)

  • 我在
    D:\Test
    文件夹中创建了简单的控制台应用程序。 代码如下

    static void Main(string[] args)
    {
        Console.WriteLine("Dumps hello world !");
        int i = 5 + 5;
        Console.ReadLine();
    }
    
    static void Main(string[] args)
    {
        Console.WriteLine("Dumps hello world !");
        Console.WriteLine("Some minor changes");
        int i = 5 + 5;
        Console.ReadLine();
    }
    
  • 生成解决方案并将exe文件复制到另一个文件夹
    D:\Test2
    。从该文件夹运行应用程序,创建转储文件(使用任务管理器),使用visual studio打开此转储,单击“使用混合调试”。VisualStudio能够加载符号,我可以从VisualStudio分析转储文件。一切都很好

  • 现在我想要以下内容
    a)修改文件夹
    D:\Test

    中的当前源代码 b) 能够分析文件夹
    D:\Test2
    中旧exe文件的转储文件

    所以,为了实现这一点,我备份了旧的.pdb文件。我把它复制到
    D:\StoredSymbols
    文件夹中

  • 将源代码更改为以下代码

    static void Main(string[] args)
    {
        Console.WriteLine("Dumps hello world !");
        int i = 5 + 5;
        Console.ReadLine();
    }
    
    static void Main(string[] args)
    {
        Console.WriteLine("Dumps hello world !");
        Console.WriteLine("Some minor changes");
        int i = 5 + 5;
        Console.ReadLine();
    }
    
  • D:\Test2
    运行一个旧的exec文件,进行进程转储,使用visual studio打开它,单击“使用混合调试”。正如预期的那样,Visual studio尝试从
    D:\test
    文件夹加载符号,但无法加载,因为.pdb文件已对应于新的exe文件,而不是旧的exe文件

  • 所以我为.pdb文件设置了新路径-
    D:\StoredSymbols
    ,但visual studio仍然无法分析转储文件

    为什么
    我应该做些什么来完成我的任务?这是截图


  • 这是我的调试-->模块屏幕截图

    在附带的屏幕截图上,它说它跳过了加载
    mscorlib.dll的符号,并说明了原因(“只是我的代码”)

    我认为你不是在要求那些符号。你想装你的。如果选中
    Debug->Modules
    Symbol Load Information
    (在关联菜单下),则可能会看到“PDB与图像不匹配”的信息。据我所知,VS需要符号来自与图像相同的构造,所以没有办法克服这一点,除非你伪造符号。这可以通过使用R#(付费)或dotPeek(免费)实现。dotPeek附带了一个符号服务器,可按需为PDB提供服务

    基本上,您将dotPeek符号服务器作为符号服务器添加到VS中,它将根据需要生成PDB


    我已经录了一段简短的啧啧声,告诉大家如何做到这一点:

    谢谢Pawel的回复。“可能会看到“PDB与图像不匹配”的信息。实际上我没有看到这样的消息。我用模块屏幕快照更新了问题,这有点奇怪。今天晚些时候我会再次检查这个案例。我再次重播了这些步骤,虽然我得到了“源代码不可用”屏幕,但当我将帧切换到代码时,我得到了源代码(但不是完全匹配)因为它们不同。当您看到此错误时,您的调用堆栈是什么?您是否在自己的代码库中显示了一个方法?再次感谢Pawel的努力和帮助。实际上我不理解您的问题。Visual Studio没有问我有关源代码的问题,我也没有看到任何屏幕“源代码不可用”"。事实上这很奇怪……visual studio如何在没有源代码的情况下分析转储?@失望,您这边的问题如何?通常,如果找不到源文件,我们可以使用模块反汇编进行调试,但如果PDB与DLL的版本不完全匹配,它通常会拒绝加载。因此,实际上您可以把pdb文件放在你身边,对吗?如果是这样,在你禁用“工具->选项->调试”下的“要求源文件与原始版本完全匹配”选项后,如何调试你的应用程序?