Re: 请教heap corruption的问题。

.Net程序调试

请教heap corruption的问题。


xavier 2010-06-12, 11:03 上午

C#的windows app程序,不定时的crash.

打开pageheap /full 后用adplus生成full dump。

用!analyze -v 分析结果如下,好像应该是heap corruption.

MODULE_NAME: heap_corruption

IMAGE_NAME:  heap_corruption

DEBUG_FLR_IMAGE_TIMESTAMP:  0

STACK_COMMAND:  ~11s; .ecxr ; kb

FAILURE_BUCKET_ID:  heap_corruption!heap_corruption_80000003_HEAP_CORRUPTION

BUCKET_ID:  APPLICATION_FAULT_HEAP_CORRUPTION_STATUS_BREAKPOINT_heap_corruption!heap_corruption

但是很奇怪的是,载入sos后用!clrstack看不到调用堆栈,报了如下信息:

OS Thread Id: 0xf4 (11)
Failed to start stack walk: 80004005

也就是说改线程上并没有运行.net的code。用kb看了一下call stack,

ChildEBP RetAddr  Args to Child             
0cc2f9f8 7c994a15 00000008 18649000 00000000 ntdll!DbgBreakPoint
0cc2fa10 7c9a9354 00000008 7c9a9594 01151000 ntdll!RtlApplicationVerifierStop+0x160
0cc2fa8c 7c9aa517 01151000 00000004 18649000 ntdll!RtlpDphReportCorruptedBlock+0x92
0cc2fab0 7c9aa71a 01151000 01000002 00000020 ntdll!RtlpDphNormalHeapFree+0x2e
0cc2fb00 7c9ad7bb 01150000 01000002 18649000 ntdll!RtlpDebugPageHeapFree+0x79
0cc2fb74 7c989e1c 01150000 01000002 18649000 ntdll!RtlDebugFreeHeap+0x2c
0cc2fc5c 7c967553 01150000 01000002 18649000 ntdll!RtlFreeHeapSlowly+0x37
0cc2fd2c 7698d01c 01150000 00000000 18649000 ntdll!RtlFreeHeap+0xf9
0cc2fd40 770d5491 76a96034 18649000 76a96034 ole32!CRetailMalloc_Free+0x1c
0cc2fd60 770d5427 00000000 76a9680c 770d5481 oleaut32!APP_DATA::FlushMemCache+0x28
0cc2fd6c 770d5481 76992b5c 77151078 00000000 oleaut32!ReleaseAppData+0x56
0cc2fd70 76992b5c 77151078 00000000 7c8097d0 oleaut32!CReleaseAppData::Release+0x5
0cc2fd88 770d16af 00000000 00000000 00000003 ole32!CoSetState+0x80
0cc2fec4 770d15a8 770d0000 00000003 00000000 oleaut32!DllMain+0x76
0cc2fee4 7c94118a 770d0000 00000003 00000000 oleaut32!_DllMainCRTStartup+0x52
0cc2ff04 7c953a23 770d1560 770d0000 00000003 ntdll!LdrpCallInitRoutine+0x14
0cc2ff7c 7c80c126 7c800000 7c940000 0ab5b000 ntdll!LdrShutdownThread+0xd7
0cc2ffb4 7c80b718 00000000 7c800000 7c940000 kernel32!ExitThread+0x3e
0cc2ffec 00000000 77e36c7d 0ab5b000 00000000 kernel32!BaseThreadStart+0x3c

请教高手,出问题的线程(Thread Id: 0xf4 (11))并不是我的程序生成的,难道是.net生成的GC管理线程?

如果是.net生成的线程的,为什么会发生heapcorruption异常呢?

Re: 请教heap corruption的问题。


xavier 2010-06-12, 11:33 上午

补充一下,还有一点比较奇怪,一般来说打开pageheap /full后如果是heap操作越界的话,会出现accessviolation异常,

而且因为程序中并没有处理,应该是2nd chance exception。但是我用adplu dump出来的都是1st chance exception。

而且这4个exception都发生在一个线程(0xf4 (11)))

Re: 请教heap corruption的问题。


格蠹老雷 2010-06-13, 23:53 下午
什么样的程序,容易复现么?

Re: 请教heap corruption的问题。


johnl 2011-06-27, 19:38 下午
这是个COM thread, 而且corrupt的是COM的heap, 检查下interop代码。
dump分析至少应该 ~*kb 把所有的stack都列出来。

Re: 请教heap corruption的问题。


skyworth 2011-07-04, 10:58 上午
sp

Powered by Community Server Powered by CnForums.Net