2012-02-21 65 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可能是也可能不是同一臺機器,只要它們在單獨的應用程序域或池中運行即可。