.NET新能源汽车锂电池检测程序UI挂死问题分析.docx

.NET新能源汽车锂电池检测程序UI挂死问题分析.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

.NET新能源汽车锂电池检测程序UI挂死问题分析

目录一:背景1.讲故事二:Windbg分析1.程序现象2.理解WindowsFormsSynchronizationContext3.卡死的真正原因4.7号线程到底创建了什么控件三:总结

一:背景

1.讲故事

这世间事说来也奇怪,近两个月有三位朋友找到我,让我帮忙分析下他的程序hangon现象,这三个dump分别涉及:医疗,新能源,POS系统。截图如下:

那这篇为什么要拿其中的新能源说事呢?因为这位朋友解决的最顺利,在提供的一些线索后比较顺利的找出了问题代码。

说点题外话,我本人对winform是不熟的,又奈何它三番五次的出现在我的视野里,所以我决定写一篇文章好好的总结下,介于没有太多的参考资料,能力有限,只能自己试着解读。

二:Windbg分析

1.程序现象

开始之前先吐槽一下,这几位大佬抓的dump文件都是wow64,也就是用64bit任务管理器抓了32bit的程序,见如下输出:

wow64cpu!CpupSyscallStub+0x9:756d2e09c3ret

所以就不好用windbgpreview来分析了,首先要用!wow64exts.sw将64bit转为32bit,本篇用的是windbg10,好了,既然是UI卡死,首当其冲就是要看一下UI线程到底被什么东西卡住了,可以用命令!clrstack看一下。

0:000:x86!clrstack

OSThreadId:0x1d90(0)

ChildSPIPCallSite

0019ee6c0000002b[HelperMethodFrame_1OBJ:0019ee6c]System.Threading.WaitHandle.WaitOneNative(System.Runtime.InteropServices.SafeHandle,UInt32,Boolean,Boolean)

0019ef506c4fc7c1System.Threading.WaitHandle.InternalWaitOne(System.Runtime.InteropServices.SafeHandle,Int64,Boolean,Boolean)

0019ef686c4fc788System.Threading.WaitHandle.WaitOne(Int32,Boolean)

0019ef7c6e094e7eSystem.Windows.Forms.Control.WaitForWaitHandle(System.Threading.WaitHandle)

0019efbc6e463b96System.Windows.Forms.Control.MarshaledInvoke(System.Windows.Forms.Control,System.Delegate,System.Object[],Boolean)

0019efc06e09722b[InlinedCallFrame:0019efc0]

0019f0446e09722bSystem.Windows.Forms.Control.Invoke(System.Delegate,System.Object[])

0019f0786e318556System.Windows.Forms.WindowsFormsSynchronizationContext.Send(System.Threading.SendOrPostCallback,System.Object)

0019f0906eef65a8Microsoft.Win32.SystemEvents+SystemEventInvokeInfo.Invoke(Boolean,System.Object[])

0019f0c46eff850cMicrosoft.Win32.SystemEvents.RaiseEvent(Boolean,System.Object,System.Object[])

0019f1106eddb134Microsoft.Win32.SystemEvents.OnUserPreferenceChanged(Int32,IntPtr,IntPtr)

0019f1306f01f0b0Microsoft.Win32.SystemEvents.WindowProc(IntPtr,Int32,IntPtr,IntPtr)

0019f1340

文档评论(0)

132****1508 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档