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

我尝试了以下方法:

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

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


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


当前回答

我使用VS10将一个C#应用程序与一个静态库集成,这是我的新手。我编写了一个托管代码dll来连接它们。除了静态库,我可以在任何地方设置断点。我收到了上面描述的消息-没有为该文档加载符号。我尝试了上面的许多建议。我可以看到符号没有被加载。我终于注意到一个复选框“配置调试”,“启用非托管代码调试”。这允许我在静态库函数中设置断点。

其他回答

我有一个blazor webassembly项目,从答案中几乎尝试了所有方法,但都没有奏效,解决方案是使用Chrome而不是Firefox,并且达到了断点。blazor-webassembly的文档中也有以下内容

Visual Studio需要“工具”>“选项”>“调试”>“常规”中的“为ASP.NET(Chrome、Edge和IE)启用JavaScript调试”选项。这是Visual Studio的默认设置。如果调试不起作用,请确认已选择该选项。

我通过以下方式解决这个确切问题:

以管理员身份打开工作室使用构建->清洁解决方案使用Build->Build

我最终将我的问题追溯到使用多个PostSharp版本的明显不兼容问题。我试图调试的应用程序具有PostSharp的早期版本,但引用的项目使用的是较新版本,出于某种原因,这导致VS拒绝为该应用程序生成PDB文件(所有其他DLL都加载了调试符号)。

解决方案是将每个项目中的PostSharp更新到最新版本并重新编译。

我的问题是aspx、aspx.vb和aspx.designer.vb文件导入错误(可能是一个接一个地导入到项目中)。

断点位于aspx.vb中,但无法访问,并显示此问题的警告。

解决方案是删除这三个文件并再次导入它们。现在我可以到达断点了。

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