2012-02-21 94 views
13

我得到一个真正令人沮丧的Silverlight插件崩溃,影响IE和Firefox。Silverlight 5 - 调试npctrl.dll崩溃

从事件日志中的错误是:

Faulting application name: iexplore.exe, version: 9.0.8112.16421, time stamp: 0x4d76255d 
Faulting module name: npctrl.dll, version: 5.0.61118.0, time stamp: 0x4ec5fc64 
Exception code: 0xc0000094 
Fault offset: 0x0001d720 
Faulting process id: 0x434 
Faulting application start time: 0x01ccf0b878b55ca7 
Faulting application path: C:\Program Files (x86)\Internet Explorer\iexplore.exe 
Faulting module path: c:\Program Files (x86)\Microsoft Silverlight\5.0.61118.0\npctrl.dll 
Report Id: bd79af3d-5cab-11e1-8948-000c29de3e25 

我就得到了作为异常时附加的WinDbg得到一点点的更多信息:

(17e4.13f8): Break instruction exception - code 80000003 (first chance) 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\SYSTEM32\ntdll.dll - 
ntdll!DbgBreakPoint: 
00000000`77810530 cc    int  3 
0:029> g 
(17e4.1790): Integer divide-by-zero - code c0000094 (first chance) 
First chance exceptions are reported before any exception handling. 
This exception may be expected and handled. 
*** ERROR: Symbol file could not be found. Defaulted to export symbols for NPCTRL.dll  - 
NPCTRL+0x1d720: 
7b59d720 f7f1   div  eax,ecx 

好了,NTDLL .dll除以零。我真的不知道如何进一步调试。我试着查看一些解释如何的文章 - 但我认为我是有限的基于ntdll.dll没有可用符号的事实?

如何缩小我的部分代码导致此错误的因素?

+0

我们可以看到发生崩溃的代码吗? – 2012-02-21 18:15:19

+0

不幸的是,我不确定是什么原因造成的。这有些随意 - 这意味着它可能是我的服务调用(代理类利用C​​hannelFactory )的结果,或者它可能与我的布局/过渡动画有关。换句话说,你所问的正是我想要找到的:) – 2012-02-21 18:20:04

+0

如果你得到一个除零错误,你将不得不张贴代码,在代码中存在你传递一个无效值的地方,或试图转换或做一些无效值计算因为DivideByZero错误例如1/0将给出该错误。 – MethodMan 2012-02-21 19:02:38

回答

12

后调试的时间,我可以复制在一个小项目的问题。只需创建一个“启用silverlight的Web服务”,并引用它。然后切换到使用客户端HTTP堆栈:

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp); 

关于和ntdll.dll的错误而崩溃的10-15%的机会在我的机器上的服务(和他的同事也一样)了。

我发现了两种方法来缓解这个问题。

1)停止使用客户端网络堆栈。这个问题似乎从未出现过浏览器堆栈

2)在VMWare之外访问silverlight应用程序。这个问题似乎只发生在虚拟机内。感谢RobSiklos找出答案。

希望这可以帮助别人。

+0

我尝试安装最终用户运行时间,但它没有帮助 – RobSiklos 2012-03-16 17:11:42

+0

是的,这对我有帮助 - 当我在VM Server上运行它时,它在SLLAuncher.exe中抛出了除零错误 - 但是从外部访问它可以正常工作。 – Rodney 2012-08-22 03:10:43

+0

完全LAME!在调用WCF服务时,切换到ClientHttp解决了奇怪的间歇性错误。 – Pwninstein 2012-10-08 18:58:26

0

这些Windbg命令将从Microsoft的符号服务器加载ntdll.dll(和其他Microsoft模块)的符号。

.symfix

.reload/F

+0

这似乎在做某事..但!分析-v仍然是毫无价值的。 – 2012-02-21 23:26:20

1

您是否在VMware虚拟机中运行?在这里看到:http://communities.vmware.com/thread/394306?tstart=0

更新(2013年3月15日):根据上面链接的论坛主题最新帖子,似乎微软终于解决了这个问题。

+0

是的,看起来我对环境的差异得出了错误的结论。 – 2012-03-22 03:59:29

+0

更新了我的回答,以反映VMware可能是一个原因,而不是开发SDK /运行时。 – 2012-03-22 04:10:41

5

设置Vmware虚拟机仅使用1个处理器,问题不会再现。 从屏幕顶部虚拟机>虚拟机设置>处理器 - >处理器内核数量= 1.

+0

这为我修好了!谢谢!我在运行Mac OS X上的VMware Fusion时遇到了同样的问题,它们分别是IE9和IE10中的Windows 7和Windows 8。 – 2012-08-20 20:19:23

+0

它也适合我。谢谢 – Bruno 2012-08-29 15:23:36

+0

Thaat帮助。谢谢! – Roberto 2012-08-31 18:58:31

0

如果您正在虚拟机中运行silverlight应用程序,那么如果真的非常绝望并需要得到它的工作。

如果您正在同一网站或同一进程中运行silverlight应用程序和数据提供程序,请尝试分解它们。让我解释...

我的应用程序有3个选项,(1)直接数据库连接(这里不适用),(2)WEB服务或(3)HTTP aspx页面。

每当我使用选项2和3但在同一个站点内调用提供程序时,应用程序即将崩溃。不过,我注意到,当我调用托管在另一个域(跨域)上的相同(或不同)Web服务时,它不会崩溃。

我的silverlight应用程序在很大程度上依赖于同时运行的线程。我不确定它是否与线程有关,或者为什么w3w进程和iexplore进程在虚拟机内不能很好地协同工作。

我也得到了“零除”的错误,但这是我解决它的方法。因此,除了Silverlight应用程序及其托管网站使用与其数据源不同的网站或Web服务(即使该数据源网站位于同一虚拟机上)之外,相同的代码和相同的所有内容都是相同的。

这有意义吗?

因此,在http://localhost/app.aspx中运行的S/L应用程序使用运行在https://itisqa-d1/folder1/service1.svc中的WCF服务。在这种情况下,itisqa-d1和localhost可能是也可能不是同一台机器,只要它们在单独的应用程序域或池中运行即可。