2010-05-20 3 views
7

Может ли необработанное исключение в приложении C# вызвать синий экран смерти?Необработанные исключения C#

+1

Возможно, водитель ожидает, что вы будете взаимодействовать с ним определенными способами, поэтому косвенным образом исключение может изменить способ взаимодействия с драйвером, а затем выявить основной недостаток. Если вы не можете обновить драйвер, ваш лучший вариант - сузить конкретный вариант использования, который вызывает неприятную ошибку и обходит ее. –

ответ

14

Если вы не имеете дело с неуправляемыми ресурсами, такими как доступ к необработанной памяти. (В этом случае исключение вряд ли является причиной)

. NET Исключения будут зависеть от среды выполнения. Вы можете сбой своей ПРОГРАММЫ, но не ОС.

В моем опыте единственными вещами, которые вызывают BSOD, являются плохие драйверы и аппаратные ошибки. (Это, конечно, не обширный список причин BSOD, но это первое, что я смотрю.)

+0

Неуправляемые ресурсы не могут вызвать BSOD. –

+0

@ Stephen Cleary: Я уверен, что вызов неуправляемого кода, который ссылается на неисправный драйвер, может вызвать BSOD, дело в том, что в контексте .NET (Where Is Exceptions live) вы не будете вызывать BSOD. Как только вы покидаете управляемый код, никаких гарантий нет. – Aren

+0

@Aren: Что вы имеете в виду, «вызов неуправляемого кода, который ссылается на неисправный драйвер, может вызвать BSOD». Не могли бы вы рассказать? –

2

Нет; в идеале, должно быть никак не, чтобы вызвать BSOD с C#.

Покажите нам код, вызывающий его, и мы увидим, можем ли мы помочь.

2

Нет, это не так. Это не означает, что вы не могли бы потенциально вызвать BSOD с помощью программы на C#, но если бы вы это сделали, это было бы связано с тем, что не было обработано необработанное исключение.

3

Единственными причинами для BSOD являются аппаратная ошибка, ошибка ОС или ошибка драйвера. Код .NET никогда не может вызвать BSOD.

+0

Да, файл драйвера (ser2pl.sys), который был установлен для конвертера USB-RS232, специально вызван как проблема на BSOD. Я пробовал несколько разных вещей, но (коротко расскажите) BSOD происходит только на более старых системах (той же ОС: WinXP SP3), оснащенной устаревшим корневым центром USB 1.1. Однако другие применения C# с использованием одного и того же преобразователя не приводят к сбою. Изменение скорости передачи данных и конфигурации порта драйвера, по-видимому, не имеет значения. –

+0

Я предполагаю, что это результат WinDbg 'analysis -v', который имеет правильный анализ не менее 95% времени, я бы сказал. Практически единственное, что вы можете сделать, это обновить драйверы (или проинструктировать своих клиентов, если это клиентские машины). –

+0

Спасибо. Что такое WinDbg? Является ли эта часть C# или она используется для сообщения об ошибке на BSOD? –

0

Можете ли вы поделиться кодом, который взаимодействует с вашим водителем?

В любом случае, похоже, что сам драйвер неисправен: BSOD является результатом необработанного сбоя в коде, запущенном в ядре (в этом случае ваш драйвер).

2

Да, это возможно, косвенно. Существует много неуправляемого кода, который вы будете использовать при работе с пространствами имен, такими как System.Management, System.Windows.Media, System.Drawing.Printing, System.IO.Ports. Этот код может вызывать вызовы драйверов устройств, которые могут вызвать ошибку в драйвере устройства. Синий экран следующий.

Очевидно, что реальная проблема не в управляемом коде, это крахмальный драйвер.

Но, чтобы ответить на вопрос напрямую: нет, необработанное управляемое исключение не может вызвать BSOD.

Смежные вопросы