我们的C#/ COM/C++应用程序崩溃了,我需要帮助调试它。运行启用了gflags和WinDbg后,我们确定崩溃是由访问冲突造成的,但我们还没有能够缩小它的范围。我们没有看到所有机器上的问题;有几台机器似乎经常重现这个问题,但不是确定性的。我们观察到应用程序崩溃时,只需从应用程序切换(例如Alt-Tab),然后再切换回来。 WinDbg的输出如下。如何调试非确定性访问冲突崩溃?
我们一直在试图系统地评论可能导致问题的代码领域,但我们还没有取得太多成功。
关于我们应该尝试的调试步骤或工具的任何建议?
分析-v
EXCEPTION_RECORD:FFFFFFFF - (.exr 0xffffffffffffffff)ExceptionAddress: 1a584ff2 (+ 0x1a584ff1)
ExceptionCode:0000005(访问 冲突)ExceptionFlags:00000000 NumberParameters: 2参数[0]: 00000000参数[1]:1a584ff2 尝试从地址1a584ff2读取PROCESS_NAM E:ProcessFiles.exe
ERROR_CODE:(NTSTATUS)0xc0000005- 0x%08lx处的指令标记为 内存在0x%08lx处。内存可能是 不是%s。
EXCEPTION_CODE:(NTSTATUS)0xc0000005 - 0x%08lx处的指令引用0x%08lx处的内存。 内存不能是%s。
EXCEPTION_PARAMETER1:00000000
EXCEPTION_PARAMETER2:1a584ff2
READ_ADDRESS:1a584ff2
FOLLOWUP_IP:ED20 + 1a584ff1 1a584ff2 ?? ???
NTGLOBALFLAG:2000000
APPLICATION_VERIFIER_FLAGS:0
IP_MODULE_UNLOADED:ED20 + 1a584ff1 1a584ff2 ?? ???
MANAGED_STACK:(TransitionMU) 0EC6F6F4 7B1D8CCE System_Windows_Forms_ni System.Windows.Forms.Application + ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(的Int32, 的Int32,Int32)将+ 0x24e 0EC6F790 7B1D8937 System_Windows_Forms_ni! !System.Windows.Forms.Application + ThreadContext.RunMessageLoopInner(的Int32, System.Windows.Forms.ApplicationContext)+ 0x177 0EC6F7E4 7B1D8781 System_Windows_Forms_ni!System.Windows.Forms.Application + ThreadContext.RunMessageLoop(的Int32, System.Windows .Forms.ApplicationContext)+ 0x61 0EC6F814 7B195911 System_Windows_Forms_ni!System.Windows.Forms。Application.Run(System.Windows.Forms.Form中)+ 0X31 0EC6F828 0969D97A Extract_Utilities_Forms!Extract.Utilities.Forms.VerificationForm`1 [系统.__佳能, mscorlib程序] A(System.Object的)+ 0x23a 0EC6F8C0 79A00EEE mscorlib_ni!System.Threading.ThreadHelper.ThreadStart_Context(System.Object的)+ 0x72a25e 0EC6F8CC 792E019F mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object的) + 0x6f 0EC6F8E4 797DB48A mscorlib_ni!System.Threading.ThreadHelper.ThreadStart(System.Object)+ 0x4a (TransitionUM)
LAST_CONTROL_TRANSFER:从7e418734 到1a584ff2
FAULTING_THREAD:FFFFFFFF
ADDITIONAL_DEBUG_TEXT:上螺纹[0]:[E30]
BUGCHECK_STR:基于属性[ip_not_executable] 从帧跟进设置 APPLICATION_FAULT_BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_WRONG_SYMBOLS_WINDOW_HOOK
PRIMARY_PROBLEM_CLASS: BAD_INSTRUCTION_PTR
DEFAULT_BUCKET_ID: BAD_INSTRUCTION_PTR
STACK_TEXT:!7b1d8cce System_Windows_Forms_ni System.Windows.Forms.Application + ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop + 0xC的 7b1d8937 System_Windows_Forms_ni System.Windows。 Forms.Application + ThreadContext.RunMessageLoopInner +为0x0 7b1d8781 System_Windows_Forms_ni!System.Windows.Forms.Application + ThreadContext.RunMessageLoop +为0x0 7b195911 System_Windows_Forms_ni!System.Windows.Forms.Application.Run + 0X31 0969d97a Extract_Utilities_Forms!Extract.Utilities.Forms.VerificationForm`1 [系统.__佳能, mscorlib程序]。A + 0x23a 79a00eee mscorlib_ni!System.Threading.ThreadHelper.ThreadStart_Context + 0x72a25e 792e019f mscorlib_ni!System.Threading.ExecutionContext。润+ 0x6f 797db48a mscorlib_ni System.Threading.ThreadHelper.ThreadStart + 0x4a
STACK_COMMAND:.ecxr; ~~ [e30]; .frame 0; **伪上下文**; KB
FAILED_INSTRUCTION_ADDRESS: ED20 + 1a584ff1 1a584ff2 ??
???SYMBOL_NAME:ED20
FOLLOWUP_NAME:MachineOwner
MODULE_NAME:ED20
IMAGE_NAME:ED20
DEBUG_FLR_IMAGE_TIMESTAMP:0
FAILURE_BUCKET_ID: BAD_INSTRUCTION_PTR_c0000005_Ed20!卸载
BUCKET_ID: APPLICATION_FAULT_BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_WRONG_SYMBOLS_WINDOW_HOOK_BAD_IP_Ed20
跟帖:MachineOwner
您是否尝试过在启用第一次机会异常处理的情况下运行附加到调试器? (在Visual Studio中按Ctrl + Alt + E)。 – 2010-04-16 18:33:39
是的,奇怪的是:我们什么都看不到。它似乎只能在一台机器上重现,而不是在我们的开发机器上重现。 – 2010-04-16 18:36:50
堆已损坏。你会在这个线程中找到很好的调试提示:http://stackoverflow.com/questions/1010106/how-to-debug-heap-corruption-errors或者通过Google搜索“如何调试堆损坏”。 – 2010-04-16 20:07:26