现象
部署到服务器上的应用程序挂掉,并且无法在使用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