为了账号安全,请及时绑定邮箱和手机立即绑定

C#捕获堆栈溢出异常

C#捕获堆栈溢出异常

C#
互换的青春 2019-07-03 17:11:25
C#捕获堆栈溢出异常我得到了对引发堆栈溢出异常的Methode的递归调用。第一个调用被TRY CATCH块包围,但未捕获异常。堆栈溢出异常是否以一种特殊的方式运行?我能正确地捕捉/处理异常吗?注:如果相关:异常不会在主线程中引发。代码抛出异常的对象由Assembly.LoadFrom(.).CreateInstance(.)手动加载。
查看完整描述

3 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

从2.0开始,StackOverflow异常只能在以下情况下捕获。

  1. CLR正在宿主环境中运行。

    *

    其中主机特别允许处理StackOverflow异常
  2. 堆栈溢出异常是由用户代码引发的,而不是由于实际的堆栈溢出情况(

    参照系)

*“宿主环境”,如“我的代码宿主CLR和我配置CLR的选项”,而不是“我的代码运行在共享主机上”


查看完整回答
反对 回复 2019-07-03
?
守着一只汪

TA贡献1872条经验 获得超3个赞

上的MSDN页面StackOverflow异常s:

在以前版本的.NET Framework中,应用程序可以捕获StackOverflow异常对象(例如,从无限递归中恢复)。但是,目前不鼓励这种做法,因为要可靠地捕获堆栈溢出异常并继续执行程序,需要大量额外的代码。

从.NET Framework 2.0版本开始,尝试捕获块无法捕获StackOverflow异常对象,默认情况下相应的进程将终止。因此,建议用户编写代码以检测和防止堆栈溢出。例如,如果应用程序依赖于递归,则使用计数器或状态条件终止递归循环。注意,承载公共语言运行库(CLR)的应用程序可以指定CLR卸载发生堆栈溢出异常的应用程序域,并让相应的进程继续进行。有关更多信息,请参见ICLRPolicyManager接口和托管公共语言运行时。


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 1472 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信