积极答复者
VC6 程序异常 c0000005 CreateSystemThreads

问题
-
要疯掉了,来这里求高手帮助。
我们用vc 6开发了一个程序,但是在windows 2003的某些机器上,莫名其妙的会发生程序异常,
#每次异常的时候,出问题的stack情报各不相同,感觉在任何时候任何情况下都可能会发生异常的样子。
最近一次爆掉的watson log如下(Image_Watch.exe是我们开发的程序)。
Image_Watch!IManagerController::IManagerController+0xb5ce3 这一行锁定的程序地址是 CApp里面的initinstance的DoModal主对话框的附近。
然后程序里面的log显示,最后用户只是打开了一个菜单而已。。。。
不知道 CreateSystemThreads 这个东西会在什么情况下出现异常阿,有熟悉的高手麻烦解答一下了。
*----> スレッド Id 0xa10 の状態のダンプ <----*eax=00000002 ebx=c80110b1 ecx=00000a02 edx=7c9785ec esi=00200020 edi=00173d20
eip=77ebd0ab esp=0012337c ebp=00123388 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010202*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\USER32.dll -
ファンクション: USER32!CreateSystemThreads
77ebd095 55 push ebp
77ebd096 8bec mov ebp,esp
77ebd098 53 push ebx
77ebd099 56 push esi
77ebd09a 57 push edi
77ebd09b 8b7d08 mov edi,[ebp+0x8]
77ebd09e 8b37 mov esi,[edi]
77ebd0a0 6a02 push 0x2
77ebd0a2 ff750c push dword ptr [ebp+0xc]
77ebd0a5 ff15e414e977 call dword ptr [USER32+0x14e4 (77e914e4)]
フォールト ->77ebd0ab 8a5e20 mov bl,[esi+0x20] ds:0023:00200040=??
77ebd0ae 80e30f and bl,0xf
77ebd0b1 80fb01 cmp bl,0x1
77ebd0b4 0f872bf7ffff jnbe USER32!CreateSystemThreads+0x21 (77ebc7e5)
77ebd0ba b835010000 mov eax,0x135
77ebd0bf 50 push eax
77ebd0c0 ff750c push dword ptr [ebp+0xc]
77ebd0c3 ff36 push dword ptr [esi]
77ebd0c5 e843c9fdff call USER32!EndDialog+0x22b (77e99a0d)
77ebd0ca 894508 mov [ebp+0x8],eax
77ebd0cd 8b4708 mov eax,[edi+0x8]*----> スタック バック トレース <----*
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\MFC42.DLL -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\ntdll.dll -
*** WARNING: Unable to verify checksum for C:\Program Files\HVR System\fÄ\tg\Image_Watch\Image_Watch.exe
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files\HVR System\fÄ\tg\Image_Watch\Image_Watch.exe -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\kernel32.dll -
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
00123388 77ebd75a 00173d20 c80110b1 00ad4588 USER32!CreateSystemThreads+0x8e7
001233bc 77ebd720 00173d20 c80110b1 00000000 USER32!SendDlgItemMessageA+0xa2
00123440 77ebcedc 00ad4588 0000000f 00000000 USER32!SendDlgItemMessageA+0x68
00123460 77eab6e3 000102d2 0000000f 00000000 USER32!CreateSystemThreads+0x718
0012348c 77eab874 77ebce90 000102d2 0000000f USER32!LoadCursorW+0x4cf5
00123504 77eabfce 00000000 77ebce90 000102d2 USER32!LoadCursorW+0x4e86
00123534 77ec0463 77ebce90 000102d2 0000000f USER32!CallWindowProcW+0x75
00123554 75497ab6 77ebce90 000102d2 0000000f USER32!CallWindowProcA+0x1b
00123574 75497fb0 0000000f 00000000 00000000 MFC42!Ordinal2385+0x26
00123598 75499bb7 0000000f 00000000 00000000 MFC42!Ordinal6374+0x40
001235f8 75499cfe 00124418 00000000 0000000f MFC42!Ordinal1109+0xa7
0012361c 7554648d 000102d2 0000000f 00000000 MFC42!Ordinal1578+0x3e
0012364c 77eab6e3 000102d2 0000000f 00000000 MFC42!Ordinal1579+0x4d
00123678 77eab874 75546440 000102d2 0000000f USER32!LoadCursorW+0x4cf5
001236f0 77eac8b8 00000000 75546440 000102d2 USER32!LoadCursorW+0x4e86
0012374c 77eac9c6 00ad4588 0000000f 00000000 USER32!GetMessageW+0x9f
00123774 7c978536 0012378c 00000018 001237e0 USER32!GetClientRect+0x4a
001237f0 77eb16e5 0059a7cc 00000001 00123830 ntdll!KiUserCallbackDispatcher+0x2e
00123800 754d1b70 0059a7cc 00000000 00123884 USER32!DispatchMessageA+0xf
00123830 754b426e 00000004 00000001 0059a798 MFC42!Ordinal5307+0x40
00123870 004b7b23 0059a798 0059a798 ffffffff MFC42!Ordinal2514+0x10e
0012fefc 754a3cab 00000000 00142570 00000000 Image_Watch!IManagerController::IManagerController+0xb5ce3
0012ff10 004ed9fd 00400000 00000000 00142570 MFC42!Ordinal1576+0x4b
0012ffc0 7c82f23b 00000000 00000000 7ffdf000 Image_Watch!IManagerController::IManagerController+0xebbbd
0012fff0 00000000 004ecf86 00000000 78746341 kernel32!ProcessIdToSessionId+0x209
答案
-
waston里面的.dmp文件贴出来,可以分析一下,请参看我这几篇文章把程序崩溃时的内存文件保存下来,再通过某种途径发给别人看看:
http://blog.csdn.net/Donjuan/archive/2009/02/02/3859160.aspx
http://blog.csdn.net/Donjuan/archive/2008/12/04/3446670.aspx- 已标记为答案 Allen Chen - MSFTModerator 2009年8月5日 6:07
全部回复
-
waston里面的.dmp文件贴出来,可以分析一下,请参看我这几篇文章把程序崩溃时的内存文件保存下来,再通过某种途径发给别人看看:
http://blog.csdn.net/Donjuan/archive/2009/02/02/3859160.aspx
http://blog.csdn.net/Donjuan/archive/2008/12/04/3446670.aspx- 已标记为答案 Allen Chen - MSFTModerator 2009年8月5日 6:07
-
之所以说你贴出来的堆栈是错的,是因为:
00123388 77ebd75a 00173d20 c80110b1 00ad4588 USER32!CreateSystemThreads+0x8e7
001233bc 77ebd720 00173d20 c80110b1 00000000 USER32!SendDlgItemMessageA+0xa2
00123440 77ebcedc 00ad4588 0000000f 00000000 USER32!SendDlgItemMessageA+0x68
00123460 77eab6e3 000102d2 0000000f 00000000 USER32!CreateSystemThreads+0x718
CreateSystemThreads+0x8e7这一行表示的在CreateSystemThreads函数里面,第8e7(2279行)发生了错误,虽然他是以汇编的行数做基准的,但是也还是比较恐怖的,说明这个函数至少有2279行的汇编代码,如果以平均每一行C代码对应4行汇编代码计算的话,也就是CreateSystemThreads的C代码有500行,一般很少有人会写这么长的函数的。而且从堆栈你也可以看到,里面有两个诡异的递归,一个是CreateSystemThreads,另外一个是SendDlgItemMessageA,过于诡异。