【发布时间】:2010-12-08 15:00:25
【问题描述】:
我对引发堆栈溢出异常的方法进行了递归调用。第一次调用被 try catch 块包围,但没有捕获到异常。
堆栈溢出异常是否以特殊方式表现?我可以正确捕获/处理异常吗?
不确定是否相关,但有更多信息:
主线程中没有抛出异常
代码引发异常的对象由 Assembly.LoadFrom(...).CreateInstance(...) 手动加载
【问题讨论】:
-
@RichardOD,确定我修复了这个错误,因为它是一个错误。但是问题可能以不同的方式出现,我想处理它
-
同意,堆栈溢出是一个无法捕获的严重错误,因为它不应该被捕获。改为修复损坏的代码。
-
@RichardOD:如果有人想设计,例如一种递归下降解析器,并且不会对超出主机实际要求的深度施加人为限制,应该如何去做呢?如果我有我的 druthers,就会有一个 StackCritical 异常可以被显式捕获,它会在还有一点堆栈空间时被触发;它会禁用自己,直到它被实际抛出,然后直到安全数量的堆栈空间剩余时才能被捕获。
-
这个问题很有用——如果发生堆栈溢出异常,我希望单元测试失败——但 NUnit 只是将测试移动到“忽略”类别,而不是像其他测试那样失败例外——我需要抓住它并改用
Assert.Fail。这么严重——我们该怎么做?
标签: c# try-catch stack-overflow