堆栈溢出StackOverflow异常导致应用程序挂掉

现象

  部署到服务器上的应用程序挂掉,并且无法在使用try{}Catch{}、AppDomain.CurrentDomain.UnhandledException事件处理器与Application.ThreadException事件处理器记录的日志文件中看到异常信息,在Windows 事件记录器中也未得到详细的异常堆栈信息

解释

  从.net4.0开始若发生会导致进程崩溃的异常(如stack overflows 、access violations),不会将其捕获而是直接结束进程运行,除非是在以下场景
    CLR在一个托管的环境(Visual Studio)中运行,该环境允许这些异常被捕获
    这些异常是被主动创建并抛出的,而不是执行业务代码时发生的

解决

使用Debug Diagnostic Tools捕捉mini dump。
  使用VS进行远程调试,找出异常出现的位置。确保远程的应用程序与VS加载的工程的代码文件与pdf调试符号文件是一致的,否则无法在期望的断点处断下。

参考

  http://stackoverflow.com/questions/1599219/c-sharp-catch-a-stack-overflow-exception
  http://msdn.microsoft.com/en-us/library/system.stackoverflowexception.aspx
  http://stackoverflow.com/questions/2591406/how-to-print-stack-trace-of-stackoverflowexception
  http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx
  http://blogs.msdn.com/b/tess/archive/2009/06/16/first-look-at-debugging-net-4-0-dumps-in-visual-studio-2010.aspx

posted @ 2013-02-04 16:30  beta2013  阅读(734)  评论(0编辑  收藏  举报