Silverlight 5 - Отладка сбоя npctrl.dll - PullRequest
13 голосов
/ 21 февраля 2012

Я получаю действительно разочаровывающий сбой плагина 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 нет символов?

Как я могу сузить, какая часть моегокод приводит к этой ошибке?

Ответы [ 5 ]

12 голосов
/ 22 февраля 2012

После нескольких часов отладки я смог воспроизвести проблему в небольшом проекте.Просто создайте «веб-сервис с поддержкой Silverlight» и создайте ссылку на него.Затем переключитесь на использование клиентского стека http:

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

Вызов службы на моем компьютере (и коллегах также) с вероятностью 10-15% сбоя при ошибке ntdll.dll.

Я нашел два способа смягчить эту проблему.

1) Прекратить использование клиентского сетевого стека.Похоже, что проблема никогда не возникает со стеком браузера

2) Получите доступ к приложению silverlight за пределами VMWare.Кажется, проблема возникает только изнутри виртуальной машины.Спасибо RobSiklos за выяснение этого.

Надеюсь, это кому-нибудь поможет.

5 голосов
/ 03 августа 2012

Установите для виртуальной машины Vmware только 1 процессор, и проблема не будет воспроизводиться. В верхней части экрана Виртуальная машина> Настройки виртуальной машины> Процессоры -> Количество ядер процессора = 1.

1 голос
/ 22 марта 2012

Работаете ли вы на виртуальной машине VMware? Смотрите здесь: http://communities.vmware.com/thread/394306?tstart=0

ОБНОВЛЕНИЕ (2013-03-15): Судя по последнему сообщению в ветке форума, указанной выше, похоже, что Microsoft наконец-то исправила эту проблему.

0 голосов
/ 09 октября 2012

Если вы используете приложение silverlight на виртуальной машине, вы можете попробовать это, если вы действительно впали в отчаяние и вам нужно, чтобы оно заработало.

Если вы используете приложение silverlight и поставщика данных на одном веб-сайте или в одном и том же процессе, попробуйте разделить их. Позвольте мне объяснить ...

Мое приложение имело 3 варианта: (1) прямое подключение базы данных (здесь не применимо), (2) веб-сервис или (3) страница HTTP aspx.

Всякий раз, когда я использовал варианты 2 и 3, но звонил провайдеру с одного и того же сайта, приложение вскоре падало. Однако я заметил, что когда я вызываю одну и ту же (или другую) веб-службу, размещенную в другом домене (кросс-домены), она не падает.

Мое приложение Silverlight сильно зависит от потоков, работающих одновременно. Я не уверен, имеет ли это отношение к потокам или почему процесс w3w и процесс iexplore не работают вместе в виртуальной машине.

Я также получил ошибку «деление на ноль», но так я ее решил. Итак, тот же код, все то же самое, за исключением того, что приложение silverlight и размещенный на нем веб-сайт используют другой веб-сайт или веб-службу в качестве источника данных (даже если этот веб-сайт источника данных находился на одной виртуальной машине)

Имеет ли это смысл?

Таким образом, приложение S / L, работающее в http://localhost/app.aspx, использует службу WCF, работающую в https://itisqa-d1/folder1/service1.svc. И в этом случае itisqa-d1 и localhost могут быть или не быть одним и тем же компьютером, если они работают в отдельных доменах или пулах приложений.

0 голосов
/ 22 февраля 2012

Эти команды Windbg будут загружать символы для ntdll.dll (и других модулей Microsoft) с сервера символов Microsoft.

.symfix

.reload / f

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...