Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

.Net程序调试

帖子发起人: xavier   发起时间: 2010-06-12 11:03 上午   回复: 4

Print Search
帖子排序:    
   2010-06-12, 11:03 上午
xavierzhou 离线,最后访问时间: 2010/6/12 2:29:32 xavier

发帖数前500位
注册: 2010-06-12
发 贴: 2
请教heap corruption的问题。
Reply Quote

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异常呢?


IP 地址: 已记录   报告
   2010-06-12, 11:33 上午
xavierzhou 离线,最后访问时间: 2010/6/12 2:29:32 xavier

发帖数前500位
注册: 2010-06-12
发 贴: 2
Re: 请教heap corruption的问题。
Reply Quote

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

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

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


IP 地址: 已记录   报告
   2010-06-13, 23:53 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 请教heap corruption的问题。
Reply Quote
什么样的程序,容易复现么?
IP 地址: 已记录   报告
   2011-06-27, 19:38 下午
irp 离线,最后访问时间: 2010/3/8 23:15:26 johnl

发帖数前150位
注册: 2008-09-29
发 贴: 9
Re: 请教heap corruption的问题。
Reply Quote
这是个COM thread, 而且corrupt的是COM的heap, 检查下interop代码。
dump分析至少应该 ~*kb 把所有的stack都列出来。

IP 地址: 已记录   报告
   2011-07-04, 10:58 上午
skyworth 离线,最后访问时间: 2009/12/15 16:03:09 skyworth

发帖数前25位
注册: 2008-06-07
发 贴: 55
Re: 请教heap corruption的问题。
Reply Quote
sp
IP 地址: 已记录   报告
高端调试 » 软件调试 » .Net程序调试 » Re: 请教heap corruption的问题。

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.