2009-12-16 68 views
4

当程序中出现意外的异常时(在调试器中)。有时你只是想跳过它,因为在那个时候杀死程序比持续更有害。或者你只是想继续,因为你对另一个错误/ bug更感兴趣有没有办法在C#中继续异常?

有没有一个选项/ compilerflag/secretswitch来启用它?

我明白异常应立即解决,但也有情景(如我所描述的),其中一个只是想跳过它的时间是

回答

6

如果在代码中没有适当的catch块,则不能这样做。但是,我不记得曾经想要这么做:如果发生了一个你的代码不知道如何真正处理的异常,为什么你还想继续?那时你处于不良状态 - 继续会很危险。

你能举一个例子说明为什么你想要在调试器会话中继续而不是在生产代码中?

+0

我偶然发现了这一点 - 如果第一个异常对于实际调试的问题并不重要,那么您可能需要继续。在这种情况下,您可以将状态重置为异常之前,然后跳过引发异常的步骤。通过VS 2010中的临时调试,这可能会变得更容易:)但是,一般来说,您是对的,无论如何您迟早都必须处理第一个异常。 – OregonGhost 2009-12-16 09:49:10

+0

@jon:非常正确....但我有这个错误,只发生在生产环境中。所以我连接了调试器......并且是有未捕获的异常。而且这还不算什么大事,所以我宁愿让事情先把它做好,然后干脆停止程序修复异常并将其恢复。 – Toad 2009-12-16 09:59:59

+0

@oregon:是的......调试器捕捉到它的事实......表明程序仍然在那里漂浮......并且可能让它继续。 (就像断言有这个选项) – Toad 2009-12-16 10:01:11

2

使用try-catch块,并追赶时,唐对例外做任何事情。

+1

这是行不通的。没有捕获或最后的try是无效的,并且在发生异常时,不执行任何操作的try/catch块将不会继续执行try 2009-12-16 09:32:09

1

如果你进入调试器,然后右键点击你想要继续的行并选择:Set Next Statement ...但是使用它需要您自担风险!

+0

如果这个异常已经发生并且我被引入调试器,这是否工作? – Toad 2009-12-16 10:01:54

+0

不,只要你从调试器开始你的应用程序,如果它来自JIT,那么这是不可能的。 – jmservera 2009-12-16 14:49:46

1

在调试模式下逐句通过代码时,可以跳过执行引发不期望异常的指令。但是如果这个异常已经被抛出,并且你没有try/catch,它将会传播。

0

如果你想知道你想允许什么异常。那么你可以这样做下面

try 
{ 
     // your functionality 
} 
catch(Exception ex) 
{ 
    // Catch only the exceptions you need to point out 
} 
finally 
{ 
    //do what you want to complete with this function. 
} 
+0

是的我知道如何捕捉异常。我的问题是关于其被抛出,但我忘了捕捉和调试抓住了它是一个例外......这一次我想继续,但我不能 – Toad 2009-12-16 10:03:34

+0

你能告诉我什么EXCEPTION调试器显示和的哪一部分如果代码中存在例外,我们可以排除代码 – solairaja 2009-12-16 10:07:29

+0

。当然。 – solairaja 2009-12-16 10:10:17

0

我假设通过“跳过”你的意思是你希望你的程序在异常后继续工作。 当然,使用try-catch块时捕捉异常是可能的。

如果异常不是应用程序停止(例如,某些关键变量未在异常后初始化,并且无法继续工作),建议您至少在继续之前将其记录下来。当然,把

赶上(例外五){}

无处不在源不会导致一个稳定的应用;)

如果您的问题是多个调试相关(你不希望调试器停止每一个抛出的异常),那么在VS中有一个地方你可以改变它:

调试菜单,请选择例外。您将看到所有可能的例外情况,并且您可以调整其在用户处理或不处理时的行为。

+0

是的,我知道如何捕捉异常。我的问题是关于其被抛出,但我忘了捕捉和调试抓住了它是一个例外......这一次我想继续,但我不能 – Toad 2009-12-16 10:02:49

+0

你的意思是,你有你的生产环境中的应用程序,您现在无法改变源代码。你想通过跳过那个异常来使它工作吗? 如果是这样的话,嗯。不确定您是否可以告诉虚拟机“不要抛出此异常”... – Danail 2009-12-16 10:37:48

+0

danail:已经抛出异常并且调试器捕获了它...现在我唯一能做的就是查看一些变量,然后退出应用程序/调试器。我想(如果一个愚蠢的异常无论如何都不重要)能够让程序继续运行(从下一行/块开始) – Toad 2009-12-16 13:55:34

相关问题