Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在C#中继续执行异常?_C#_.net_Exception_Continue - Fatal编程技术网

有没有办法在C#中继续执行异常?

有没有办法在C#中继续执行异常?,c#,.net,exception,continue,C#,.net,Exception,Continue,当程序(在调试器中)发生意外异常时。有时候你只是想跳过它,因为在那一点上终止程序比继续下去更有害。或者您只是想继续,因为您对另一个错误/bug更感兴趣 是否有选项/compilerflag/secretswitch来启用此功能 我知道应该立即解决异常,但是有一些场景(如我所描述的)人们只是想暂时跳过它使用try-catch块,在捕获时,不要对异常做任何事情。如果代码中没有适当的catch块,就不能这样做。但是,我不记得曾经想过这样做:如果发生了代码不知道如何真正处理的异常,为什么要继续?此时你的

当程序(在调试器中)发生意外异常时。有时候你只是想跳过它,因为在那一点上终止程序比继续下去更有害。或者您只是想继续,因为您对另一个错误/bug更感兴趣

是否有选项/compilerflag/secretswitch来启用此功能


我知道应该立即解决异常,但是有一些场景(如我所描述的)人们只是想暂时跳过它

使用try-catch块,在捕获时,不要对异常做任何事情。

如果代码中没有适当的catch块,就不能这样做。但是,我不记得曾经想过这样做:如果发生了代码不知道如何真正处理的异常,为什么要继续?此时你的状态很糟糕——继续下去会很危险


您能举例说明为什么要在调试器会话中继续而不是在生产代码中继续吗?

如果要进入调试器,请右键单击要继续的行并选择:Set Next Statement。。。但使用它的风险自负

在调试模式下单步执行代码时,可以跳过引发意外异常的指令的执行。但是,如果异常已经抛出,而您没有try/catch,它将传播。

请查看相关文档。它包含处理应用程序异常的最佳实践,并且有许多框架代码可供您使用,如日志记录。

如果您想知道要允许什么异常。然后你可以在下面做这个

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.
}
我假设“跳过”的意思是希望程序在异常之后继续工作。 当然,这可以通过在使用try-catch块时捕获异常来实现

如果异常不是application stopper(例如,某个键变量在异常后未初始化,并且您无法继续工作),建议您至少在继续之前记录该异常。当然,推杆

捕获(例外e){}

源代码中的任何地方都不会产生稳定的应用程序;)

如果您的问题与调试器更相关(您不希望调试器在每次抛出异常时都停止),那么在VS中有一个地方可以更改:


在调试菜单中,选择异常。您将看到所有可能的异常,您可以在用户抛出或不处理异常时调整它们的行为。

C#中的异常是不可恢复的,但事件是可恢复的,这就是可恢复异常通常的实现方式:as。另请参见。

这不起作用。出现异常时,没有catch或finally的try无效,不执行任何操作的try/catch块将不会在try<块的下一行继续执行。你必须用try/catch来包装你程序中的每一行,我很难看。我也偶然发现了这一点-如果第一个异常对你实际调试的问题不重要,你可能想继续。在这种情况下,您可以将状态重置为异常之前的状态,然后跳过引发异常的步骤。使用VS 2010中的临时调试,这可能会变得容易得多:)不过,总的来说,你是对的,不管怎样,你迟早要处理第一个异常。@jon:非常正确。。。。但是我有一个bug,它只发生在生产环境中。所以我连接了调试器。。。是的,有一个意外的例外。而且这也没什么大不了的,所以我宁愿先让它正确地完成它的工作,然后彻底停止程序,修复异常并将其恢复。@oregon:是的。。。调试器捕捉到它的事实。。。指示程序仍在那里浮动..并且可能允许它继续。(就像断言有这个选项一样)@reinier:Assertions不返回任何东西,也不应该有副作用——假设异常是由返回值的方法引发的。该方法不愿意返回该值,因为检测到该状态无效。。。调用方法应该得到什么?停止程序并修复它几乎总是比在状态不好时继续运行要好。@jon:我同意它可能有问题。^)我将以此作为答案:不,这是不可能的。如果异常已经发生,并且我被抛出到调试器中,这会起作用吗?不,如果你从调试器启动应用程序,如果它来自JIT,那么这是不可能的。是的,我知道如何捕获异常。我的问题是关于一个异常,它被抛出,但我忘了捕获,调试器捕获了它。。。这个我想继续,但我不能你的意思是,你在你的生产环境中有应用程序,你现在没有权限更改源。你想通过跳过那个异常来让它工作吗?如果是这种情况,嗯。不确定是否可以告诉虚拟机“不要抛出此异常”…danail:异常已经抛出,调试器已捕获它。。。我现在唯一能做的就是查看一些变量,然后退出应用程序/调试器。我希望(在一个愚蠢的异常的情况下,无论如何都不重要)能够让程序继续(从下一行/块开始)是的,我知道如何捕捉异常。我的问题是关于一个异常,它被抛出,但我忘了捕获,调试器捕获了它。。。这一部分我想继续,但我不能告诉我调试器显示了什么异常,以及代码的哪一部分,只有几行代码CODE@solairaja这是一个假设性的问题。在抛出异常之前,我就遇到过这种情况,我周围没有try/catch块,调试器启动了。当时,我想继续执行代码,但做不到。这是我的问题:是否有可能恢复任何方式没有