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

我尝试了以下方法:

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

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


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


当前回答

最终对我有效的是将配置设置更改为“发布”而不是“调试”,因为编译器似乎跳过了代码,断点最终被命中。

其他回答

在我的情况下,Visual Studio在全局程序集缓存(GAC)中加载DLL,而不是在我的项目列表中加载DLL。我删除了GAC中的DLL,现在我可以看到断点在工作。

我的经验是尝试远程调试我部署到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环境更麻烦。

右键单击项目->财产->Web选项卡

在服务器部分,我为本地IIS更改了IIExpress,创建了虚拟目录,瞧!

以下步骤为我提供了帮助:

转到项目的“bin”文件夹。删除“调试”文件夹。重新构建项目。将重新创建调试文件夹。

现在您可以重新开始调试了。

如果您的解决方案中有多个项目,则可能是您正在调试的项目/断点未设置为启动项目。在我的案例中,我正在从同一解决方案中的其他项目调用web服务,因此该web服务不是Startup project,brfeakpoint没有命中。我将ws设置为Startup项目,并启动了调用项目的新实例。这对我有用。