C#堆栈溢出异常
我有一个堆栈溢出异常,我能够使用windbg来获取所有内容的日志,但是这个日志对我来说非常陌生,我不确定我在寻找什么。感谢您的帮助C#堆栈溢出异常,c#,C#,我有一个堆栈溢出异常,我能够使用windbg来获取所有内容的日志,但是这个日志对我来说非常陌生,我不确定我在寻找什么。感谢您的帮助 FAULTING_IP: +1d42faf00b2df58 02dbb89f e9e3000000 jmp 02dbb987 EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) ExceptionAddress: 791a2c0c (clr!EECodeManager::EnumGc
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
FAULTING\u IP:
+1d42faf00b2df58
02dbb89f e9e3000000 jmp 02dbb987
异常记录:ffffffff--(.exr 0xffffffffffffffff)
例外地址:791a2c0c(clr!EECodeManager::EnumGcRefs+0x0000001b)
例外代码:c00000fd(堆栈溢出)
例外标志:00000000
数字参数:2
参数[0]:00000001
参数[1]:02dd2edc
进程名称:crawler.exe
错误代码:(NTSTATUS)0xc00000fd-无法为堆栈创建新的保护页。
异常代码:(NTSTATUS)0xc00000fd-无法为堆栈创建新的保护页。
异常参数1:0000000 1
异常参数2:02dd2edc
循环_堆栈:从帧0x19到0x19
模块列表:
NTGLOBALFLAG:0
应用程序\验证程序\标志:0
托管_堆栈:!转储堆栈-EE
找不到导出转储堆栈
附加的\u调试\u文本:基于线程:[PSEUDO\u thread]上帧[0]的属性[Is\u ChosenCrashFollowupThread]的后续设置
最后一次控制转移:从791a2fad到791a2c0c
错误线程:ffffffff
默认_BUCKET_ID:NOSOS
主要问题类别:NOSOS
错误检查\u STR:应用程序\u故障\u故障\u堆栈\u溢出\u堆栈免疫
堆栈文本:
00000000 00000000爬虫程序.exe+0x0
SYMBOL_名称:crawler.exe
跟进名称:机器所有者
模块名称:爬虫
图像名称:crawler.exe
调试\u FLR\u映像\u时间戳:4e5a416f
STACK_命令:**伪上下文**;kb
失败\u BUCKET\u ID:NOSOS\u c0000fd\u crawler.exe!不为人知
BUCKET\u ID:APPLICATION\u FAULT\u NOSOS\u STACK\u OVERFLOW\u STACKIMMUNE\u crawler.exe
后续IP:**警告:无法验证crawler.exe的校验和
***错误:模块加载已完成,但无法为crawler.exe加载符号
爬虫+0
00400000 4d十二月ebp
WATSON_STAGEONE_网址:http://watson.microsoft.com/StageOne/crawler_exe/1_0_0_0/4e5a416f/clr_dll/4_0_30319_1/4ba1d9ef/c00000fd/00062c0c.htm?Retriage=1
跟进:机器所有者
---------
0:005>.exr 0xffffffffffffffff
例外地址:791a2c0c(clr!EECodeManager::EnumGcRefs+0x0000001b)
例外代码:c00000fd(堆栈溢出)
例外标志:00000000
数字参数:2
参数[0]:00000001
参数[1]:02dd2edc
找出流程当时在做什么,然后查找以下任一项:
- 故意递归的方法,这些方法可能已经递归到超出其预期的位置
- 意外递归属性,如下所示:
private readonly string foo; public string Foo { get { return Foo; } } // Should have been return foo;
在使用高级调试技术之前,我个人会尝试以传统方式重现问题。加载SOS(
.loadby SOS clr
或。如果您不在.NET 4上,则加载SOS mscorwks
),并使用!pe
命令以显示异常。如果没有异常对象,请使用!threads
以列出线程及其可能存在的任何异常 也许可以先试试DebugDiag-。它会自动分析你的垃圾
如果这还不够,您将需要SOS来分析.NET代码-
在这里你可以找到一些关于如何加载它的信息-
然后只需使用其中一个命令来分析转储。苔丝·费尔南德斯(Tess Fernandez)提供了关于如何将windbg与sos-结合使用的精彩教程
她还出版了帮助你学习windbg-的实验室
如果您的转储来自不同的系统,那么您在此系统上分析的转储可能会有帮助-堆栈跟踪?什么代码导致问题?您的问题是什么?逐步完成代码并发布实际异常和它所涉及的行。如果您计划从windbg调试C#,请加载SOS。不过,如果您正在调试C,我会默认使用C#Express。如果你不熟悉windbg,它是免费的,而且更容易使用。这就是问题的全部,我不知道是什么导致了这个问题