我有一个运行在数千台机器上的VB6应用程序.在极少数这些我得到“此应用程序已停止工作”错误.我在Vista,Windows 7(x32和x64)和Windows 8.1上看过它.
我把它缩小到第一次form_resize事件和第一次重绘主窗口期间窗体的实际绘制之间的某个时间.它发生在我的VB6代码的某个地方,因为我无法捕获错误,所有我记录的日志记录都是无用的.例如,如果应用程序在主窗口可见的情况下启动,则会崩溃.如果它启动最小化,它将运行直到您激活窗口然后它崩溃.今天我设法从客户端计算机上获得了一个故障转储(因为,当然我们永远不会让它在我们的开发机器上崩溃).这就是WinDBG告诉我的内容.我很感激(任何)帮助,因为我自2012年以来一直试图深入了解这个问题(!!!!!!).
FOLLOWUP_IP: msvbvm60!Zombie_Release+1233b 72960d94 8901 mov dword ptr [ecx],eax APP: timeclockmts.exe ANALYSIS_VERSION: 6.3.9600.16384 (debuggers(dbg).130821-1623) x86fre PRIMARY_PROBLEM_CLASS: WRONG_SYMBOLS BUGCHECK_STR: APPLICATION_FAULT_WRONG_SYMBOLS LAST_CONTROL_TRANSFER: from 72a09a7b to 72960d94 STACK_TEXT: WARNING: Stack unwind information not available. Following frames may be wrong. 00097504 72a09a7b 01396b8c 4fb934ec 60030053 msvbvm60!Zombie_Release+0x1233b 00097544 72a09c2c 01396b8c 00000009 00000000 msvbvm60!BASIC_DISPINTERFACE_GetTypeInfo+0x2aa 00097574 758c370d 01396b8c 00000009 75870630 msvbvm60!EVENT_SINK_Invoke+0x50 000975cc 7589c30e 00000000 000273c9 0b0dcb40 oleaut32!VarMonthName+0x11350 000975e0 758c41e5 00000001 00000002 00000000 oleaut32!VarDecNeg+0x5d45 000975f4 729932c4 0b0dcb40 000273c9 00000000 oleaut32!VarMonthName+0x11e28 00097628 72973db1 0523c0dc 00000012 4180923a msvbvm60!IID_IVbaHost+0x24c84 0009767c 729c1e19 0000000d 4180923a 0523bebc msvbvm60!IID_IVbaHost+0x5771 000976b8 729acdb0 0000000d 4180923a 05221380 msvbvm60!IID_IVbaHost+0x537d9 000976f4 729ad0a1 0523c0dc 0000000d 4180923a msvbvm60!IID_IVbaHost+0x3e770 00097728 72980eed 034a0904 0000000d 00000001 msvbvm60!IID_IVbaHost+0x3ea61 00097988 4fbadfdb 01396a70 000979fc 000979f4 msvbvm60!IID_IVbaHost+0x128ad 00097a20 4fbaa41a 01396a70 0009834c 00098478 ciaXPLabel30!DllCanUnloadNow+0x10efd 00097a5c 75873e75 01396a70 0b0ee654 00000000 ciaXPLabel30!DllCanUnloadNow+0xd33c 00097a78 72a16ef5 01396b8c 0000001c 00000004 oleaut32!DispCallFunc+0xa6 000983d4 72a09a7b 01396b8c 4fb934ec 60030053 msvbvm60!_vbaAptOffset+0x68b 00098414 72a09c2c 01396b8c 00000009 00000000 msvbvm60!BASIC_DISPINTERFACE_GetTypeInfo+0x2aa 00098444 758c370d 01396b8c 00000009 75870630 msvbvm60!EVENT_SINK_Invoke+0x50 0009849c 7589c30e 00000000 000273c9 0b0dcb40 oleaut32!VarMonthName+0x11350 000984b0 758c41e5 00000001 00000002 00000000 oleaut32!VarDecNeg+0x5d45 000984c4 729932c4 0b0dcb40 000273c9 00000000 oleaut32!VarMonthName+0x11e28 000984f8 72973db1 0523c0dc 00000012 4180923a msvbvm60!IID_IVbaHost+0x24c84
感谢blabb教会我如何修复符号并重新运行分析,我崩溃的原因变得明显.不幸的是,我已经通过反复试验解决了这个问题(一次从一个表单中删除控件直到崩溃停止发生).这是崩溃转储的行,告诉我发生了什么:
00097a20 4fbaa41a 01396a70 0009834c 00098478 ciaXPLabel30!DllCanUnloadNow+0x10efd 00097a5c 75873e75 01396a70 0b0ee654 00000000 ciaXPLabel30!DllCanUnloadNow+0xd33c
完整的日志看起来像是一个无限循环的控件试图处理自己.我放弃了控制,现在事情很顺利.