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

我尝试了以下方法:

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

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


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


当前回答

如果您同时拥有C#和本机代码(C/C++),请确保为项目启用了本机调试:1.在解决方案资源管理器中右键单击启动项目2.选择财产3.选择“调试”选项卡4.确保已启用本机代码调试

其他回答

要停止调试器的.dll以及相关的.pdb文件复制到.exe文件附近。这些文件的日期较早,因此我认为它们不会在运行时更新。我手动删除了它们,VisualStudio创建了另一对,并将此新对放在.exe附近。现在断点开始工作了!

可能Visual Studio无法复制和替换.exe附近的现有文件(.dll和.pdb),因为那里还有另一个文件。所以,如果我手动删除,那么VS可以在.exe附近创建一个新的。

我认为问题的根本原因是Visual Studio在运行时使用了另一个文件,而不是项目中的文件,并停止了。

在我的案例中,在我的项目财产中选中了“优化代码”。这导致VS将我的程序集视为“不是我的代码”,反过来,它也没有为它加载符号。

解决方案是取消选中此项。

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

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

我正在使用IE8,并试图对一些JavaScript文件进行更改。虽然代码正在执行,但它不会在断点处停止,我在断点处得到了相同的消息。升级到IE11为我解决了这个问题。

在我的案例中,这是在Windows更新之后开始的,结果是Windows更新关闭了Internet信息服务,这使得我的API似乎无法达到我设置的断点,但实际发生的是IIS无法启动,因此我的应用程序代码实际上没有运行。

再次检查Windows功能菜单中是否启用了Internet信息服务。

IIS说明:

控制面板程序打开或关闭窗口功能勾选互联网信息服务重新启动visual studio

如果使用IIS Express:

从旧控制面板中打开“添加/删除程序”,然后在IIS Express上运行修复程序,或者您可以转到“控制面板”->“程序”->“应用程序和功能”->“打开或关闭Windows功能”->Internet Information Services并检查父Internet Information Services文件夹。

我在这里得到了这样的答案:指定的参数超出了有效值的范围。参数名称:站点