C# stackoverflow exception

本文关键字:exception stackoverflow | 更新日期: 2023-09-27 18:07:05

我有一个堆栈溢出异常,我能够使用windbg来获取所有内容的日志,但是日志对我来说非常希腊,我不确定我在寻找什么。如有任何帮助,不胜感激。

FAULTING_IP: 
+1d42faf00b2df58
02dbb89f e9e3000000      jmp     02dbb987
EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 791a2c0c (clr!EECodeManager::EnumGcRefs+0x0000001b)
   ExceptionCode: c00000fd (Stack overflow)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000001
   Parameter[1]: 02dd2edc
PROCESS_NAME:  crawler.exe
ERROR_CODE: (NTSTATUS) 0xc00000fd - A new guard page for the stack cannot be created.
EXCEPTION_CODE: (NTSTATUS) 0xc00000fd - A new guard page for the stack cannot be created.
EXCEPTION_PARAMETER1:  00000001
EXCEPTION_PARAMETER2:  02dd2edc
RECURRING_STACK: From frames 0x19 to 0x19
MOD_LIST: <ANALYSIS/>
NTGLOBALFLAG:  0
APPLICATION_VERIFIER_FLAGS:  0
MANAGED_STACK: !dumpstack -EE
No export dumpstack found
ADDITIONAL_DEBUG_TEXT:  Followup set based on attribute [Is_ChosenCrashFollowupThread] from Frame:[0] on thread:[PSEUDO_THREAD]
LAST_CONTROL_TRANSFER:  from 791a2fad to 791a2c0c
FAULTING_THREAD:  ffffffff
DEFAULT_BUCKET_ID:  NOSOS
PRIMARY_PROBLEM_CLASS:  NOSOS
BUGCHECK_STR:  APPLICATION_FAULT_NOSOS_STACK_OVERFLOW_STACKIMMUNE
STACK_TEXT:  
00000000 00000000 crawler.exe+0x0

SYMBOL_NAME:  crawler.exe
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: crawler
IMAGE_NAME:  crawler.exe
DEBUG_FLR_IMAGE_TIMESTAMP:  4e5a416f
STACK_COMMAND:  ** Pseudo Context ** ; kb
FAILURE_BUCKET_ID:  NOSOS_c00000fd_crawler.exe!Unknown
BUCKET_ID:  APPLICATION_FAULT_NOSOS_STACK_OVERFLOW_STACKIMMUNE_crawler.exe
FOLLOWUP_IP: *** WARNING: Unable to verify checksum for crawler.exe
*** ERROR: Module load completed but symbols could not be loaded for crawler.exe
crawler+0
00400000 4d              dec     ebp
WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/crawler_exe/1_0_0_0/4e5a416f/clr_dll/4_0_30319_1/4ba1d9ef/c00000fd/00062c0c.htm?Retriage=1
Followup: MachineOwner
---------
0:005> .exr 0xffffffffffffffff
ExceptionAddress: 791a2c0c (clr!EECodeManager::EnumGcRefs+0x0000001b)
   ExceptionCode: c00000fd (Stack overflow)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000001
   Parameter[1]: 02dd2edc

C# stackoverflow exception

加载SOS (.loadby sos clr.loadby sos mscorwks,如果你不是在。net 4),并使用!pe命令显示异常。如果没有异常对象,则使用!threads列出线程及其可能具有的任何异常。

找出进程当时正在做什么,并查找:

  • 故意递归的方法,可能已经递归超出了它们的本意
  • 意外递归属性如下:

    private readonly string foo;
    public string Foo { get { return Foo; } } // Should have been return foo;
    

理想情况下,你应该有单元测试来帮助确定这一点——它们通常很擅长发现这类问题。单元测试运行可能仍然崩溃(StackOverflowException不能被捕获),但它应该有助于隔离它。

在使用高级调试技术之前,我个人会尝试用常规方法重现这个问题。

也许先试试DebugDiag - http://www.microsoft.com/download/en/details.aspx?id=26798。它将自动分析您的转储。

如果这还不够,你将需要SOS来分析。net代码- http://msdn.microsoft.com/en-us/library/bb190764.aspx。

在这里你可以找到一些关于如何加载它的信息-无法在WinDbg中加载SOS。

然后使用其中一个命令来分析转储。Tess Fernandez有很多关于如何使用windbg和sos的教程- http://blogs.msdn.com/b/tess/archive/tags/debugging/。

她还发表了帮助你学习windbg - http://blogs.msdn.com/b/tess/archive/2008/02/04/net-debugging-demos-information-and-setup-instructions.aspx的实验室。

如果你的转储是来自不同的系统,那么你分析这个可能会有所帮助-是可能的调试win2003 IIS崩溃转储使用windbg在windows XP?