Страницы

Поиск по вопросам

вторник, 13 ноября 2018 г.

BSOD при работе программы под .NET 4.6.2

Есть программа ("Электронной очереди") написанная на C# под фреймворк .NET 4.6.2 Программа должна постоянно крутится на сервере, но стали поступать жалобы, что компьютер перезагружается несколько раз в день, снял дамп, там присутствует постоянно 1 ошибка SYSTEM_SERVICE_EXCEPTION 0x0000003b. driver ntoskrnl.exe

Погуглив данную ошибку я нашел, что в причина скорее всего в железе (видео карты, память, HDD). Моя программа также использует железо. Я хотел спросить, может ли данный BSOD быть из за ошибок в коде, или это исключено и в любом случае будет только Exception уровня приложения.
1. Программа использует сетевую карту. 4 терминала по выдаче билетов, подключены по TCP/IP
2. Программа использует 2 USB порта: Конверторы RS-485 в USB, к ним подключены кассовые планшеты
3. Карта передающая видеобуфер. Через эту карту подключены табло, через спец программу (Mars) происходит захват видео буффера с областей экрана, эти области и идут на табло. Карта вставлена в PCI слот и подключается как монитор по DVI.
4. Вывод звука через встроенную звуковую карту. Из низкоуровневых библиотек я использую Naudio.dll (Подтягивал через Nuget).
Объект важный, хотелось бы услышать ваши мнения.


Ответ

Исключение SYSTEM_SERVICE_EXCEPTION означает проблему при переходе из кода уровня пользователя в код уровня ядра. Она может возникать например, из-за того, что данные, переданные модулю ядра, были каким-то образом повреждены и не было предусмотрено проверки их корректности. Parameter 1 у BSOD - код исключения, 0xC0000005 соответствует STATUS_ACCESS_VIOLATION, т.е. произошла попытка обратиться к защищенной области памяти.
Причиной может быть как дефект железа, так и ошибка в коде драйвера (ошибка в коде .Net приложений напрямую обычно не вызывает такое исключение). Поскольку драйвера видеоадаптеров в Windows разделены на модули уровня ядра и уровня пользователя, наибольшее подозрение падает именно на них.
Для диагностики проблемы можно попробовать следующее:
Настроить windbg на правильные символы и попытаться получить стек вызовов и список загруженных модулей. Это поможет выявить, какие именно драйвера вызывают проблему. Обновить драйвера до последних версий. Те драйвера, которые уже были недавно обновлены, наоборот попробовать откатить на предыдущую версию (т.к. в новой версии могла появится ошибка). Если проблема не исчезнет, вернуть новую версию. Заменять компоненты железа на заведомо исправные, и смотреть, на каком исчезнет ошибка.

Комментариев нет:

Отправить комментарий