一个C#桌面应用程序(在Visual Studio Express版上)工作了,但5秒钟后就不工作了。

我尝试了以下方法:

确保在所有程序集上设置了调试配置、调试标志和完整的调试信息。从我的整个计算机中删除所有bin和obj文件夹以及与项目相关的所有DLL文件。从头开始重新创建导致问题的项目。重新启动。

我在解决方案中有两个Windows窗体项目。其中一个加载调试信息,另一个不加载。它们都引用了我试图在项目文件中以完全相同的方式获取调试信息的程序集。有什么想法吗?


我想在这里补充一点,当我回来回顾这个问题时,主要是为了我自己,即在加载程序集之前不会加载符号,并且在需要时才会加载程序集。如果断点位于仅在主程序集中的一个函数中使用的库中,则在调用该函数之前,不会加载符号(并且它将显示断点未命中)。


当前回答

对于那些使用ASP.Net(框架)WSP应用程序的人来说,还有一个答案。

我能让VS正确调试的唯一方法是确保编译行web.config中的debug=“true”:

<compilation debug="true">

其他回答

一旦到达断点或使用“调试”>“全部中断”,请使用“调试>Windows”>“模块”开始调试。您将看到加载到流程中的所有程序集的列表。找到要获取其调试信息的对象。在其上单击鼠标右键,然后选择“符号加载信息”。您将看到一个对话框,其中列出了它在其中查找程序集的.pdb文件的所有目录。根据实际的.pdb位置验证该列表。确保它没有找到旧的。

在正常项目中,IDE应始终将程序集及其.pdb文件复制到与.exe相同的文件夹中,即项目的bin\Debug文件夹中。如果您一直在玩GAC,请确保将其从GAC中移除。

不要做所有这些事情,只是关闭并重新打开

只是简单的尝试——你可能已经尝试过了。右键单击解决方案资源管理器中的解决方案,单击“清理解决方案”,这将删除与解决方案关联的所有编译文件和临时文件。

重新生成解决方案并再次尝试调试。

我也遇到过在一个解决方案中对多个项目进行断点的问题——有些编译为x86,有些编译为x64。

在我的案例中,我正在使用Visual Studio的Experimental Instance调试WPF扩展。在开始调试并暂停调试后,我打开了“调试”>“窗口”>“模块”窗口。在那里,我可以看到Visual Studio试图加载符号C:\Users\<username>\AppData\Local\Microsoft\VisualStudio\15.0_76a9e536Exp\Extensions\<companyName>的目录。停止调试后,我使用Windows资源管理器删除了目标文件夹并重新启动了调试器。Visual Studio随后能够命中断点。

我最终得到了一个文件的两个副本,其中包含相同的类。这两个副本都在Visual Studio中打开,但它们有不同的文件名,其中一个实际上包含在项目中,另一个则没有。

确保正在设置的断点位于解决方案/项目实际正在编译的文件中。没有未编译文件的符号。