调试器在没有断点的情况下停止运行 VS2010

15

最近我更改了调试器中的一个选项,我认为这是导致问题的原因,但我似乎无法“撤消”它...我搜索了谷歌,所有结果都是相反的“为什么调试器会在断点处停止”。

无论如何,有人能解释一下吗?

编辑:当我在调试模式下按F5时,每次都会进入Program.cs并停在 </p> 处。

Application.SetCompatibleTextRenderingDefault(false);

Main()


1
你说的“停止”是什么意思?多久一次?在什么情况下? - bmargulies
它停止了吗?是因为异常吗? - Tim
1
一些调试器具有在启动时暂停或启动时暂停的机制,以便可以在启动代码中设置断点。我不知道VS2010是否具有此选项。 - Dan Davies Brackett
这是你的Main()方法中的第一条语句。应该与它有关。 - Hans Passant
2
只是一个随机的建议...断点位置存储在.suo文件中(在您的项目根目录下,.sln文件所在的位置 - 确保您可以查看隐藏文件)。删除此文件并没有太大的危害,因为当您关闭解决方案时,它将被重新创建。尝试关闭VS,删除.suo文件,重新打开,看看是否可以解决问题。 - Patrick Pitre
按键快捷键 F5 不会意外绑定到 逐步进入 上了吧? - ta.speot.is
4个回答

32

虽然这是一个旧帖子,但我刚遇到了同样的问题。我所做的一切就是删除所有断点(对我来说是Ctrl+Shift+F9),然后对我的启动项目进行清理,接着重建并运行。之后它就不会在没有断点的地方中断了。


10
我注意到当你在与其他文件同名的文件上设置断点时,通常会出现这种情况。例如,如果你在不同项目中有两个名为"Program.cs"的文件,其中一个文件中设置了断点,调试器似乎会在另一个文件的相应行上停止。 - Chris Ray
好发现!在这上面浪费了一个小时。 - Gulzar

6
我遇到了同样的问题,但不是由于选项更改引起的。我认为我已经找到了原因,但没有解决办法来修复它。我有一个包含多个项目的解决方案,涉及的项目如下:
- 业务逻辑 - 数据访问 - 控制台应用程序
在BL和DA中,我都有一个名为Credit.cs的类,这两个类位于不同的命名空间中。
当我在BL.Credit.cs的第235行设置断点时,调试器会停在DA.Credit.cs的第236行,即使没有设置断点。我认为这是Visual Studio的一个错误。
当我删除BL中的断点时,它随后也不会停在DA中。
如果您希望投票,我已经提交了一个错误报告。 https://connect.microsoft.com/VisualStudio/feedback/details/699804/debugger-stops-on-same-line-in-different-class-where-there-is-no-breakpoint

在同一个解决方案中的一对MVC 3项目中遇到了相同的“feature”。它们都有一个名为AccountController.cs的文件,其中断点交互奇怪。已在此处和Connect上点赞。谢谢! - HABO
有趣...我有两个programm.cs文件,而且出现了问题。 - Offler
谢谢!微软在2010年从未修复过这个问题。白痴! - Nick Westgate

4
这是一个解决断点在每个具有相同名称的类中激活行为的解决方法,即使完全限定名称不同。设置断点后,转到断点窗口(如果还没有打开,则为调试|窗口|断点)。右键单击触发了太多同名类的断点(例如,您只想让Project1.Action有一个断点,但是Project2.Action也会触发断点),并选择“条件”。将条件值设置为类似以下内容:this.GetType().FullName == “Project1.Action”。
此后,条件会使执行仅在具有正确完全限定名称的类上中断。

我在Visual Basic中使用了以下代码:Me.GetType().FullName.Contains("Business")。如果有多个类需要处理,则不是精确匹配。 - Dzmitry Lahoda

0

它是通过抛出异常来停止,还是完全停止应用程序的执行?如果您的代码中没有UnHandledExceptionHandler,它看起来像是直接停止了,但实际上您有一个异常。

更新: 以下是您的Main方法应该看起来如何捕获未处理的异常,因为try/catch并不总是有效。

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
        Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
        throw new NotImplementedException();
    }

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        // You should/MAY see an error right here.
        throw new NotImplementedException();
    }

它只是停止了,然后我再按F5,它就可以继续正常运行。 - kurasa
你是否有按照上述要求处理未处理的异常的事件处理程序?如果没有,你将看不到任何东西,程序会直接结束。 - Scott Wylie
在它周围放置一个try catch,没有任何异常被引发-它运行得非常好。没有错误,只是需要每次按三次F5有点麻烦。 - kurasa
感谢您的代码,但我仍在处理中。 我将您的两个事件处理行粘贴到了EnableVisualstyles行之前,就像您的示例一样,现在它又在下面的2行处出现错误。 我记得有一段时间我曾经修改过Tools-> Debugging,但现在我已经不记得原因了,我根据我在Google上读到的文章修改了某些选项,自那以后它就一直这样做。 我确定它与其中一个调试选项有关,但我不知道哪个是... - kurasa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接