簡體   English   中英

Silverlight 5 - 調試npctrl.dll崩潰

[英]Silverlight 5 - Debugging npctrl.dll crash

我得到了一個非常令人沮喪的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

我已經在異常期間附加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沒有可用的符號這一事實?

如何縮小我的代碼的哪一部分導致此錯誤?

經過幾個小時的調試,我能夠在一個小項目中復制問題。 只需創建一個“支持Silverlight的Web服務”,並引用它。 然后切換到使用客戶端http堆棧:

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

在我的機器(以及同事)上調用服務有大約10-15%的可能性與ntdll.dll錯誤崩潰。

我找到了兩種方法來緩解這個問題。

1)停止使用客戶端網絡堆棧。 瀏覽器堆棧似乎永遠不會發生這個問題

2)訪問VMWare外部的silverlight應用程序。 問題似乎只發生在虛擬機中。 感謝RobSiklos解決這個問題。

希望這有助於某人。

將Vmware虛擬機設置為僅使用1個處理器,問題將無法重現。 從屏幕頂部虛擬機>虛擬機設置>處理器 - >處理器核心數= 1。

您是否在vmware虛擬機內運行? 請參見此處: http//communities.vmware.com/thread/394306?tstart = 0

更新(2013-03-15):根據上面鏈接的論壇帖子中的最新帖子,似乎微軟終於解決了這個問題。

如果您在虛擬機中運行silverlight應用程序,那么如果您真的非常絕望並需要讓它運行,您可以嘗試這個。

如果您在同一網站或同一過程中運行silverlight應用程序和數據提供程序,請嘗試拆分它們。 讓我解釋...

我的應用程序有3個選項,(1)DIRECT DATABASE CONNECTION(這里不適用),(2)WEB SERVICE或(3)HTTP aspx頁面。

每當我使用選項2和3但在同一站點內調用提供程序時,應用程序很快就會崩潰。 但是我注意到,當我調用托管在另一個域(跨域)上的相同(或不同)Web服務時,它不會崩潰。

我的silverlight應用程序很大程度上依賴於並發運行的線程。 我不確定它是否與線程有關,或者為什么w3w進程和iexplore進程在VM內部不能很好地協同工作。

我也得到了“除以零”錯誤,但這就是我解決它的方式。 所以,相同的代碼,相同的一切,除了silverlight應用程序及其托管的網站使用不同的網站或Web服務作為其數據源(即使該數據源網站在同一個虛擬機上)

這有意義嗎?

因此,在http://localhost/app.aspx運行的S / L應用程序使用在https://itisqa-d1/folder1/service1.svc運行的WCF服務。 在這種情況下,itisqa-d1和localhost可能是也可能不是同一台機器,只要它們在單獨的應用程序域或池中運行即可。

這些Windbg命令將從Microsoft的符號服務器加載ntdll.dll(和其他Microsoft模塊)的符號。

.symfix

.reload / f

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM