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

C# 如何调试非确定性访问冲突崩溃?,c#,c++,com,crash,access-violation,C#,C++,Com,Crash,Access Violation,我们的C#/COM/C++应用程序正在崩溃,我需要帮助调试它。在启用gflags并连接WinDbg的情况下运行,我们确定崩溃是由访问冲突造成的,但我们无法将其缩小到更大范围。我们并不是在所有机器上都看到这个问题;有两台机器似乎频繁地重现问题,但不是决定性地重现。我们观察到,应用程序崩溃的原因是简单地从应用程序(比如Alt Tab)切换到另一个应用程序。WinDbg的输出如下 我们一直在尝试系统地注释可能导致问题的代码区域,但我们还没有取得太大的成功 关于我们应该尝试哪些调试步骤或工具,有什么建议

我们的C#/COM/C++应用程序正在崩溃,我需要帮助调试它。在启用gflags并连接WinDbg的情况下运行,我们确定崩溃是由访问冲突造成的,但我们无法将其缩小到更大范围。我们并不是在所有机器上都看到这个问题;有两台机器似乎频繁地重现问题,但不是决定性地重现。我们观察到,应用程序崩溃的原因是简单地从应用程序(比如Alt Tab)切换到另一个应用程序。WinDbg的输出如下

我们一直在尝试系统地注释可能导致问题的代码区域,但我们还没有取得太大的成功

关于我们应该尝试哪些调试步骤或工具,有什么建议吗

!!分析-v

异常记录:ffffffff--(.exr 0xFFFFFFFFFFFF)例外地址: 1a584ff2 (+0x1a584ff1)
例外代码:c0000005(访问 违反)例外标志:00000000 NumberParameters:2参数[0]: 00000000参数[1]:1a584ff2 尝试读取地址1a584ff2

进程名称:ProcessFiles.exe

错误代码:(NTSTATUS)0xc0000005- 0x%08lx处的指令被引用 内存位于0x%08lx。记忆可以 不是%s

异常代码:(NTSTATUS)0xc0000005 -0x%08lx处的指令引用了0x%08lx处的内存。这个 内存不能为%s

异常参数1:00000000

异常参数2:1a584ff2

读取地址:1a584ff2

后续IP:Ed20+1a584ff1 1a584ff2 ?? ???

NTGLOBALFLAG:2000000

应用程序\验证程序\标志:0

IP_模块_卸载:Ed20+1a584ff1 1a584ff2

托管_堆栈:(TransitionMU) 0EC6F6F4 7B1D8CCE 系统\u窗口\u窗体\u ni!System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafentiveMethods.IMsoComponentManager.FPushMessageLoop(Int32, Int32,Int32)+0x24e 0EC6F790 7B1D8937 系统\u窗口\u窗体\u ni!System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)+0x177 0EC6F7E4 7B1D8781 系统\u窗口\u窗体\u ni!System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)+0x61 0EC6F814 7B195911 系统\u窗口\u窗体\u ni!System.Windows.Forms.Application.Run(System.Windows.Forms.Form)+0x31 0EC6F828 0969D97A 提取工具表格!Extract.Utilities.Forms.VerificationForm`1[[System.\uu Canon, mscorlib]].A(系统对象)+0x23a 0EC6F8C0 79A00EEE mscorlib_ni!System.Threading.ThreadHelper.ThreadStart_上下文(System.Object)+0x72a25e 0EC6F8CC 792E019F mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, 系统对象)+0x6f 0EC6F8E4 797DB48A mscorlib_ni!System.Threading.ThreadHelper.ThreadStart(System.Object)+0x4a (过渡期)

最后一次控制转移:从7e418734开始 至1a584ff2

错误线程:ffffffff

附加调试文本:后续设置 基于属性[ip\u非\u可执行文件] 来自线程[e30]上的帧[0]

错误检查\u STR: 应用程序错误错误指令无效指针读取错误符号窗口挂钩

主要问题类: 错误的指令

默认_BUCKET_ID: 错误的指令

堆栈_文本:7b1d8cce 系统\u窗口\u窗体\u ni!System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafentiveMethods.IMsoComponentManager.FPushMessageLoop+0xc 7b1d8937 系统\u窗口\u窗体\u ni!System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner+0x0 7b1d8781 系统\u窗口\u窗体\u ni!System.Windows.Forms.Application+ThreadContext.RunMessageLoop+0x0 7b195911 系统\u窗口\u窗体\u ni!System.Windows.Forms.Application.Run+0x31 0969d97a 提取工具表格!Extract.Utilities.Forms.VerificationForm`1[[System.\uu Canon, mscorlib]].A+0x23a 79a00eee mscorlib_ni!System.Threading.ThreadHelper.ThreadStart_上下文+0x72a25e 792e019f mscorlib_ni!System.Threading.ExecutionContext.Run+0x6f 797db48a mscorlib_ni!System.Threading.ThreadHelper.ThreadStart+0x4a

STACK_命令:.ecxr~~[e30]; .第0帧;**伪上下文**;kb

失败的\u指令\u地址: Ed20+1a584ff1 1a584ff2??

符号名称:Ed20

跟进名称:机器所有者

模块名称:Ed20

图片名称:Ed20

调试\u FLR\u映像\u时间戳:0

故障_BUCKET _ID: 错误的指令\u PTR\u c0000005\u Ed20!卸下

BUCKET\u ID: 应用程序错误错误指令无效指针读取错误符号窗口挂钩错误IP Ed20

跟进:机器所有者


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


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

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


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

谢谢您的回复

我们最终通过评估自上一版本软件(没有崩溃)以来的所有代码更改来发现问题。罪魁祸首是HideSelection在tex的OnLostFocus覆盖中被设置为false