Silverlight 5 - 调试npctrl.dll崩溃

Sha*_*wan 14 .net c# crash silverlight

我得到了一个非常令人沮丧的Silverlight插件崩溃,影响了IE和Firefox.

事件日志中的错误是:

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
Run Code Online (Sandbox Code Playgroud)

我已经在异常期间附加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
Run Code Online (Sandbox Code Playgroud)

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

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

Sha*_*wan 13

经过几个小时的调试,我能够在一个小项目中复制问题.只需创建一个"支持Silverlight的Web服务",并引用它.然后切换到使用客户端http堆栈:

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);
Run Code Online (Sandbox Code Playgroud)

在我的机器(以及同事)上调用服务有大约10-15%的可能性与ntdll.dll错误崩溃.

我找到了两种方法来缓解这个问题.

1)停止使用客户端网络堆栈.浏览器堆栈似乎永远不会发生这个问题

2)访问VMWare外部的silverlight应用程序.问题似乎只发生在虚拟机中.感谢RobSiklos解决这个问题.

希望这有助于某人.


小智 5

将Vmware虚拟机设置为仅使用1个处理器,问题将无法重现.从屏幕顶部虚拟机>虚拟机设置>处理器 - >处理器核心数= 1.