【发布时间】:2014-01-20 15:29:34
【问题描述】:
我对 .NET 比较陌生,但我知道如果在 Win32 线程中发生无限递归,线程堆栈最终会耗尽空间并发生堆栈溢出。
现在我在这里有一个 .NET 应用程序,它可能在某个场景中进行无限递归。
我想知道是否有办法使用诸如 Process Explorer 之类的工具来查找托管线程堆栈的当前消耗,以便我可以查看详细信息?
【问题讨论】:
-
如果你用尽了堆栈,你会得到一个 StackOverflowException 并且堆栈会告诉你为什么会发生这种情况。您到底在寻找什么?
-
如果是无限递归,在你有时间做任何事情之前它就会崩溃(毕竟不是那么无限!)。
-
您的代码中有错误。一个非常讨厌的错误,SOE 是最糟糕的例外之一。您使用调试器诊断错误。调用堆栈窗口显示递归。修复错误需要您耳边的工具,没有替代工具。当然你已经知道了这一切,也许只需要朝着正确的方向努力。
-
比这复杂一点,软件功能要求在再次调用该函数之前应该有一个延迟。这实质上意味着我将不得不等待很长时间才能发生堆栈溢出。我知道如果我连接 Visual Studio,我可以看到调用堆栈,但我很想知道在特定时刻线程堆栈上使用的空间量。 .我该怎么做?
标签: .net recursion stack-overflow callstack process-explorer