为什么Visual Studio在调试时停止?

时间:2008-11-25 15:18:37

标签: c# .net visual-studio debugging

有时候,当我调试一个c#应用程序时,我会遇到一个断点,当我尝试继续,步骤或步入时,它什么都不做。突出显示当前行的黄线消失,但它永远不会到达下一行。应用程序仍然像我在断点处一样冻结,除了点击停止调试按钮并重新启动,我什么也做不了。这不会一直发生,但一旦它在应用程序上启动,它似乎总是发生在该应用程序之后。我发现在类声明之前添加以下代码“修复”了该应用程序的问题,但我很好奇为什么会发生这种情况。

[System.Diagnostics.DebuggerDisplay("Form1")]

其他细节: 我没有注意到特定线冻结时的任何模式。我编写的大多数应用程序都使用线程,因此每次在一个线程中发生这种情况的可能性很大。

7 个答案:

答案 0 :(得分:2)

我已经看到了调试器试图评估自动/本地窗口中显示的变量的停滞问题。如果评估很复杂,那么可能会导致严重的停滞。

您可以通过“工具”|“选项”关闭自动评估,这确实会产生很大的影响。

答案 1 :(得分:2)

我遇到过这种行为,虽然这是我的第一次。

我通过两种方式解决了这个问题

  1. 您放置此属性的方式,[System.Diagnostics.DebuggerDisplay(“Form1”)]
  2. 关闭工具 - >选项 - >调试 - >常规 - >启用属性评估和其他隐式函数调用。
  3. 我仍在调试我的代码,但在我看来,一些Autos评估失败(可能抛出异常),这可能会导致调试器崩溃。

    如果您的情况也是如此,请告知我们。

答案 2 :(得分:1)

你在调试什么类型的代码?

当你“步入”你是在调用自己的.NET代码,还是调用本机库,或者你没有pdb文件的外部程序集?这两种情况都会导致调试器在外部代码执行时冻结。

答案 3 :(得分:1)

如果您调试多线程应用程序,您可能正在更改线程。您可以在调试时在Thread与“Thread windows”之间切换,以便能够再次查看调试黄线的位置。

答案 4 :(得分:0)

我的通灵调试器说你错过了某些东西的符号,并且VS正在试图查找它们。尝试将符号路径设置为奇怪的东西,如C:\ foo。

答案 5 :(得分:0)

你的情况似乎很可能是死锁。按下暂停按钮,下次发生时查看线程视图。

答案 6 :(得分:0)

当我的数据库非常慢时,我已经看到了这种行为,NHibernate试图在引擎盖下写入它,并且当数据库被挂钩时整个调试器被随机锁定。 / p>