#c_sharp #net #windows #bsod
Есть программа ("Электронной очереди") написанная на 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). Объект важный, хотелось бы услышать ваши мнения.
Ответы
Ответ 1
Исключение SYSTEM_SERVICE_EXCEPTION означает проблему при переходе из кода уровня пользователя в код уровня ядра. Она может возникать например, из-за того, что данные, переданные модулю ядра, были каким-то образом повреждены и не было предусмотрено проверки их корректности. Parameter 1 у BSOD - код исключения, 0xC0000005 соответствует STATUS_ACCESS_VIOLATION, т.е. произошла попытка обратиться к защищенной области памяти. Причиной может быть как дефект железа, так и ошибка в коде драйвера (ошибка в коде .Net приложений напрямую обычно не вызывает такое исключение). Поскольку драйвера видеоадаптеров в Windows разделены на модули уровня ядра и уровня пользователя, наибольшее подозрение падает именно на них. Для диагностики проблемы можно попробовать следующее: Настроить windbg на правильные символы и попытаться получить стек вызовов и список загруженных модулей. Это поможет выявить, какие именно драйвера вызывают проблему. Обновить драйвера до последних версий. Те драйвера, которые уже были недавно обновлены, наоборот попробовать откатить на предыдущую версию (т.к. в новой версии могла появится ошибка). Если проблема не исчезнет, вернуть новую версию. Заменять компоненты железа на заведомо исправные, и смотреть, на каком исчезнет ошибка.
Комментариев нет:
Отправить комментарий