如何调试非确定性访问冲突崩溃?

我们的C#/ COM / C ++应用程序崩溃了,我需要帮助调试它。 运行启用了gflags和WinDbg后,我们确定崩溃是由访问冲突造成的,但我们还没有能够缩小它的范围。 我们没有看到所有机器上的问题; 有几台机器似乎经常重现这个问题,但不是确定性的。 我们观察到应用程序崩溃时,只需从应用程序切换(例如Alt-Tab),然后再切换回来。 WinDbg的输出如下。

我们一直在系统地评论可能导致问题的代码领域,但我们还没有取得太大的成功。

有关我们应该尝试的调试步骤或工具的任何建议?

!分析-v

EXCEPTION_RECORD:ffffffff - (.exr 0xffffffffffffffff)ExceptionAddress:1a584ff2(+ 0x1a584ff1)
ExceptionCode:c0000005(访问冲突)ExceptionFlags:00000000 NumberParameters:2参数[0]:00000000参数[1]:1a584ff2尝试从地址1a584ff2读取

PROCESS_NAME: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 [[System .__ Canon,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]的属性[ip_not_executable]设置后续处理:[e30]

BUGCHECK_STR: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 [[System .__ Canon,mscorlib]]。A + 0x23a 79a00eee mscorlib_ni!System.Threading.ThreadHelper.ThreadStart_Context + 0x72a25e 792e019f mscorlib_ni!System.Threading.ExecutionContext.Run + 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


找到经常重现崩溃的计算机,并在该计算机上安装WinDbg。 然后运行windbg.exe -I ,这将使WinDbg成为事后处理程序。

等待崩溃发生。 发生这种情况时,WinDbg会在崩溃时自动打开。 使用WinDbg命令kpn获取堆栈跟踪。 (您可能还需要确保机器上有符号。)


感谢您的回复。

我们最终通过评估自软件最新版本(未崩溃)以来的所有代码更改来发现问题。 罪魁祸首是HideSelection在文本控件的OnLostFocus覆盖中被设置为false。 根据这篇文章,这会导致不好的事情发生(无论如何,在某些机器上)。

链接地址: http://www.djcxy.com/p/82311.html

上一篇: How to debug nondeterministic access violation crash?

下一篇: how to fix bug due to a heap corruption