最近,我的 .NET 应用程序(asp.net 网站)中出现了堆栈溢出异常,我之所以知道该异常是因为它出现在我的 EventLog 中。我知道 StackOverflow 异常无法被捕获或处理,但是有没有办法在它杀死您的应用程序之前记录它?我有 10 万行代码。如果我知道堆栈跟踪,或者只是堆栈跟踪的一部分,我就可以追踪无限循环/递归的来源。但如果没有任何有用的诊断信息,看起来需要进行大量的猜测和测试。
我尝试在我的应用程序域(在 global.asax 中)设置一个未处理的异常处理程序,但这似乎没有执行,如果堆栈溢出应该终止并且不运行任何 catch/finally 块,那么这是有意义的。
有没有什么方法可以记录这些,或者是否有一些我可以启用的秘密设置,可以在应用程序崩溃时将堆栈帧保存到磁盘?
你最好的选择是使用ADPlus http://msdn.microsoft.com/en-us/library/ff537953.aspx.
Windows NT 内核调试团队有一个很好的博客文章 http://blogs.msdn.com/b/ntdebugging/archive/2009/05/18/capturing-adplus-clr-crashes.aspx关于如何用它捕获 CLR 异常。有很多关于它的不同配置选项的详细信息。
ADPlus 将监视该应用程序。您可以指定它运行在崩溃模式 http://msdn.microsoft.com/en-us/library/ff539318.aspx因此您可以告诉 ADPlus 在 StackOverflowException 发生时立即进行内存转储。
一旦有了内存转储,您就可以使用 WinDbg 和托管调试扩展,例如Psscor http://www.microsoft.com/download/en/details.aspx?id=21255查看堆栈溢出期间发生了什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)