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

我尝试了以下方法:

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

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


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


当前回答

在我的案例中,是一个名为Strong Namer的软件包与另一个Nuget一起导致了这个问题。删除强名称解决了问题。

或者,特别是当存在对StrongNamer包的依赖时,使用强名称密钥签署项目也可以解决问题。

其他回答

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

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

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

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

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

我在x86(或x64)中重建整个解决方案(包括引用的项目)时也遇到了同样的问题

尽管我从Configuration Manager(Build->ConfigManager)将所有项目设置为x86,但我的一些项目没有设置为x86。

所以,只需确保右键单击项目并跟随

项目->财产->调试选项卡,验证配置和平台。

我的经验是尝试远程调试我部署到AWS服务器上的web应用程序。问题是,当我部署到服务器时,它会编译并创建exe和pdb文件。但是本地编译的exe和pdb文件与服务器上部署的文件不匹配,因此当我连接到远程进程,然后尝试在Debug/Windows/Modules中为我的项目的DLL加载符号时,它会找到本地pdb文件,我会收到一个错误“pdb不匹配图像”

因此,在尝试了以上所有建议后,这是我为使断点工作所做的工作:

连接并登录到远程web服务器。转到保存exe和pdb文件的文件夹。在我的例子中,它是C:\inetpub\AspNetCoreWebApps\app。复制该文件夹中的*.pdb文件。将pdb文件粘贴到您的本地计算机上,在那里查找项目的pdb文件。您将在Debug/Windows/Modules中找到路径,右键单击DLL并选择Symbol Load Information。。。现在您可以使用调试/附加到进程。。。要附加到远程进程,它应该加载符号,因为pdb现在与远程exe文件匹配。

完成远程调试后,可以重建项目以恢复当前的pdb文件,以便在本地进行调试。

可能可以向符号路径列表中添加一个路径,以便从远程服务器加载pdb,但如果有,我还没有找到它。这可能比简单地将pdb文件从远程服务器复制到本地VS环境更麻烦。

在共享点项目中调试silverlight应用程序时遇到问题。在项目财产的sharepoint选项卡下,必须显式启用silverlight应用程序的调试。否则会出现此错误。