DebuggingWinformCrash——C#System.AccessViolationExceptionwasunhandledMessage=Attemptedtoreadorwriteprotectedmemory。这通常表明其他内存已损坏。源=系统。Windows.FormsStackTrace:在System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG&msg,HandleRefhwnd,Int32msgMin,Int32msgMax,Int32remove)在??System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods。IMsoComponentManager.FPushMessageLoop(Int32dwComponentID,Int32原因,Int32pvLoopData)在System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32原因,ApplicationContext上下文)在System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32原因,contextContext)在System.Windows.Forms.Application.Run(FormmainForm)在ABC.Program.Main()在C:DocumentsandSettings...Program.cs:line17InnerException:Thisexceptionishardtoreproduce,itisveryhard预料到的。我附加了我的visualstudio调试器并运行了7到10次测试,并且能够成功捕获此堆栈跟踪。请注意,这些都不是我的代码,因此在Windows级别发生了一些令人毛骨悚然的事情。顺便说一句,我们使用PInvoke打开/关闭iexplore、记事本等窗口。经过一番搜索并遵循微软那个人的建议,我尝试使用ADPlus获取内存转储并使用Windbg进行分析,但我得到的信息来自windbg的代码比异常本身更神秘。此转储文件中存储了一个感兴趣的异常。可以通过.ecxr访问存储的异常信息。(904.1cf4):访问冲突-代码c0000005(第一次/第二次机会不可用)eax=003c4d10ebx=0000x0000edx=00000000esi=003c4d2aedi=0012f1a0eip=003c4b64esp=0012f11cebp=0012f=10nvupiopelinapenccs=001bss=0023ds=0023bes=0023g0023g0023fs=04003c4b648b410cmoveax,dwordptr[ecx+0Ch]ds:0023:0000000c=?????????0:000>.ecxreax=003c4d10ebx=00000000ecx=00000000edx=00000000esi=003c1a00aeip=003c4b64esp=0012f11cebp=0012f138iopl=0nvupeiplzrna=002ncds3s=0es=0023fs=003bgs=0000efl=00010246003c4b648b410+0Ch]ds:0023:0000000c=??????????可能有一些专家可以提供这些信息,我不能。那么,您是如何分析这些问题的呢?.Net的“JVM堆转储分析器”之类的东西?环境:WindowsXPSP3[完全访问权限,管理员]在VisualStudio中,转到项目属性并启用“非托管代码取消”,然后启动调试器。[不确定是否需要以下步骤,但我只是这样做了]在VisualStudio的立即窗口中执行.loadSOS.dll我找到了问题的根本原因:垃圾收集类型为“ABC.Form1+SendMessageDelegate::Invoke”对委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。将委托传递给非托管代码时,托管应用程序必须让它们保持活动状态,直到确保它们永远不会被调用。感谢所有回复或评论的人。以上就是C#学习教程:调试winform崩溃-C#分享的全部内容,如果对您有用,还需要进一步了解C#学习教程,希望大家多加关注——本文收集自上网,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
