编程语言
首页 > 编程语言> > c# – 接下来调试客户环境中的崩溃

c# – 接下来调试客户环境中的崩溃

作者:互联网

我们产品的一部分是IE插件(BHO),它在多个操作系统版本/ IE版本的许多不同环境中运行愉快.

但是,在一个客户的试用设置中,通过Citrix XenDesktop运行XP SP3机器,当满足以下两个条件时,IE 7会崩溃:

>我们的插件已加载
>加载了Shockwave flash对象加载项(最新版本 – Flash11e.ocx)

一些额外的信息:

>当我们尝试向用户显示对话框时,或者在此之后不久,就会发生崩溃.然而,崩溃不会发生在我们的代码中,这些代码都是用C#编写的,它发生在各个地方,通常是ole32.dll.
>我们的对话框是在Web浏览器控件中呈现的HTML页面,通过BHO中的form.ShowDialog(ownerWindow)显示在Form中.

插件似乎独立工作.禁用闪存或跳过任何使用闪存的站点可以防止崩溃.

客户是合理的,我能够使用MS调试工具运行IE,以便在崩溃时捕获一些转储.我现在在解释转储时遇到了一些麻烦.认为这是堆损坏我运行调试工具启用了完整的pageheap,但是没有触发断点.

调试工具的分析如下:

In
iexplore_PID_5064_Date_12_20_2011__Time_11_19_26AM_161_Second_Chance_Exception_C0000005.dmp
the assembly instruction at ole32!HandleIncomingCall+e2 in
C:\WINDOWS\system32\ole32.dll from Microsoft Corporation has caused an
access violation exception (0xC0000005) when trying to read from
memory location 0x03ce4ff8 on thread

崩溃点的堆栈跟踪是:

Thread 7 - System ID 1140
Entry point   ieframe!CTabWindow::_TabWindowThreadProc 
Create time   20/12/2011 19:18:08 
Time spent in user mode   0 Days 0:0:19.828 
Time spent in kernel mode   0 Days 0:0:10.468 


Full Call Stack


Function                                Arg 1     Arg 2     Arg 3     Arg 4   Source 
ole32!HandleIncomingCall+e2                 0f9aafbc     00000034     00000001     07e8ab6c    
ole32!STAInvoke+24                          17444f80     00000001     0781efc0     077e8f10    
ole32!AppInvoke+7e                          17444f28     077e8f10     0781efc0     07e8ab6c    
ole32!ComInvokeWithLockAndIPID+2c2          17444f28     077ec420     00000000     17444f28    
ole32!ComInvoke+60                          17444f28     00000400     0774ee30     07bcfe48    
ole32!ThreadDispatch+23                     17444f28     07bcfeb0     7752b096     00000000    
ole32!ThreadWndProc+fe                      005d0594     078b6ee0     0000babe     17444f2c    
user32!InternalCallWinProc+28               7752b096     005d0594     00000400     0000babe    
user32!UserCallWinProcCheckWow+150          00000000     7752b096     005d0594     00000400    
user32!DispatchMessageWorker+306            7bcff64     00000000     07bcffb4     3e25e69b    
user32!DispatchMessageW+f                   07bcff64     0013e490     0013e5b8     07868ff0    
ieframe!CTabWindow::_TabWindowThreadProc+189 07e03e30     0013e490     0013e5b8     07868ff0    
kernel32!BaseThreadStart+37                 3e25e464     07868ff0     00000000     00000000    

我将会看到我可以从这个转储文件中获得什么,但我希望这里有人会有一个好主意.我想在客户网站上测试更多东西,但我们只有很多机会,所以我需要在任何时候非常明智地使用它.

对我来说,接下来的几个步骤似乎是:

>如果问题是闪现了我们显示对话框的方式,我想测试一个完全剥离的BHO,只显示对话框,以显示问题不在于我们的代码.
>机器上安装了很多其他插件,最好从一个精简的图像开始并从那里开始构建,以查看问题何时开始触发.

有时崩溃发生在pseuoserverinproc.dll中,后者是HDX MediaStream的一部分,它在本地而不是在服务器上运行Flash内容.

==更新

我在WinDbg分析我拥有的转储方面取得了相当大的成功.我认为在桌面上尝试使用gflags / windbg会遇到麻烦并对其进行现场调试是非常有意义的.

对于目前处于类似位置的任何人来说,这将是我推荐的下一步,在我有机会应用它的几周时间内,我会更多地了解这个建议有多好.

解决方法:

有一个调试版的flash播放器,可以输出可能对你有帮助的诊断信息.我意识到问题不一定是闪存,但它可能提供一些可能的问题的洞察力.

我必须承认我已经安装了一段时间,但我相信这些链接可能对您有所帮助:

关于如何配置调试器版本以输出日志的侮辱:

http://kb2.adobe.com/cps/403/kb403009.html

调试器版本的下载链接:

http://www.adobe.com/support/flashplayer/downloads.html

标签:c,debugging,internet-explorer,crash,bho
来源: https://codeday.me/bug/20190621/1251878.html