.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();
}
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文件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文件放在你身边,对吗?如果是这样,在你禁用“工具->选项->调试”下的“要求源文件与原始版本完全匹配”选项后,如何调试你的应用程序?