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
加载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?