C#捕获堆栈溢出异常

C#捕获堆栈溢出异常

我得到了对引发堆栈溢出异常的Methode的递归调用。第一个调用被TRY CATCH块包围,但未捕获异常。

堆栈溢出异常是否以一种特殊的方式运行?我能正确地捕捉/处理异常吗?

注:如果相关:

  • 异常不会在主线程中引发。

  • 代码抛出异常的对象由Assembly.LoadFrom(.).CreateInstance(.)手动加载。


互换的青春
浏览 1473回答 3
3回答

梵蒂冈之花

从2.0开始,StackOverflow异常只能在以下情况下捕获。CLR正在宿主环境中运行。*其中主机特别允许处理StackOverflow异常堆栈溢出异常是由用户代码引发的,而不是由于实际的堆栈溢出情况(参照系)*“宿主环境”,如“我的代码宿主CLR和我配置CLR的选项”,而不是“我的代码运行在共享主机上”

守着一只汪

上的MSDN页面StackOverflow异常s:在以前版本的.NET Framework中,应用程序可以捕获StackOverflow异常对象(例如,从无限递归中恢复)。但是,目前不鼓励这种做法,因为要可靠地捕获堆栈溢出异常并继续执行程序,需要大量额外的代码。从.NET Framework 2.0版本开始,尝试捕获块无法捕获StackOverflow异常对象,默认情况下相应的进程将终止。因此,建议用户编写代码以检测和防止堆栈溢出。例如,如果应用程序依赖于递归,则使用计数器或状态条件终止递归循环。注意,承载公共语言运行库(CLR)的应用程序可以指定CLR卸载发生堆栈溢出异常的应用程序域,并让相应的进程继续进行。有关更多信息,请参见ICLRPolicyManager接口和托管公共语言运行时。
打开App,查看更多内容
随时随地看视频慕课网APP