我一直在使用 Visual Studio 2013 编写一个针对 .NET framework v3.5 的 Web 应用程序。
其中的间接递归会导致 StackOverflowException,所以我编写了一个方法来检查堆栈是否溢出。
public static void CheckStackOverflow() {
StackTrace stackTrace = new StackTrace();
StackDepth = stackTrace.GetFrames().Length;
if(StackDepth > MAXIMUM_STACK_DEPTH) {
throw new StackOverflowException("StackOverflow detected.");
}
}
问题是 StackOverflowException 发生在第一行,即new StackTrace()
,所以我无法处理它。
我知道调用 StackTrace() 也会将堆栈加深几个级别,所以我知道这可能会发生。但是,有一些值得深思的地方:
- 在 Visual Studio 2012 中选择Visual Studio(ASP.NET) 开发服务器(以下简称 Cassini)没有问题,所以我的 IIS 设置或类似的设置是可疑的。
- 发生异常时的堆栈还不够深。
这仅在调试时发生。无论配置如何(即调试/发布)。
编辑:我尝试更改IIS Express设置,但没有任何区别。此外,尝试本地 IIS选项也没有运气。所以,
if(RunningWithVisualStudio) { // Start Debugging or Without Debugging
if(UsingCassini) {
throw new StackOrverflowException("A catchable exception."); // expected
} else {
throw new StackOverflowException("I cannot catch this dang exception.");
}
} else { // publish on the identical ApplicationPool.
throw new StackOrverflowException("A catchable exception."); // expected
}
我以为我在配置IIS Express时犯了错误,但现在我完全迷失了。