Устранение неполадок System.NullReferenceException в приложении C# с использованием SQL CE

У меня есть приложение, которое продолжает падать и говорит только «Приложение перестало работать». В деталях сказано, что это произошло из-за исключения System.NullReferenceException. Я не могу воспроизвести это исключение в своей среде разработки (это x86, тестирование на x64 на сервере, где я могу масштабировать потоки) по неизвестным причинам, и я не могу найти способ поймать ошибку. У меня есть блоки try-catch вокруг всего. Я думаю, это связано с тем, что некоторые запросы SQL CE возвращают нулевые значения, даже если они находятся в блоках try-catch и имеют операторы if, проверяющие нулевые значения.

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

РЕДАКТИРОВАТЬ: мне удалось воспроизвести в моей среде разработки. Ошибка возникала при попытке записи в текстовое поле с помощью диспетчера. Я написал ex.Message (где ex — это мое исключение), но оказалось, что ex был нулевым и вызвал ошибку. Как ex может быть нулевым в try-catch? Мне кажется, это не имеет смысла.


person xxf8xx    schedule 21.12.2011    source источник
comment
Ваше сообщение не содержит ни одного знака вопроса, поэтому я предполагаю, что оно не содержит вопроса, верно?!?   -  person Uwe Keim    schedule 21.12.2011
comment
Извините, спрашиваю, как мне справиться с ошибкой.   -  person xxf8xx    schedule 21.12.2011
comment
Попробуйте открыть средство просмотра событий и посмотреть, что происходит.   -  person P.K    schedule 21.12.2011
comment
так как вы любите попробовать .. поймать. попробуйте поместить catch..try внутри каждого предложения catch.. и еще один catch внутри него.. так вы получите многомерный try..catch.. просто шучу.   -  person    schedule 21.12.2011
comment
Исключение не было нулевым. Возможно, вы поймали нулевое исключение.   -  person SamFisher83    schedule 21.12.2011


Ответы (1)


На самом деле, вы не должны добавлять try-catch ко всему. Это именно то, что мешает вам найти ошибку. Сочетание NullReferenceException и большого количества try-catch на самом деле является предупреждением о том, что вы должны перестать проглатывать все ошибки. Исключения есть исключения, а не просто отлавливать их все. Если ваше программное обеспечение подвержено большому количеству исключений, в вашем коде есть ошибки, которые необходимо исправить.

  1. Создайте ветку своего кода в системе управления исходным кодом (вы ее используете, верно?).
  2. Удалите все (!) блоки try-catch.
  3. Запустите код и отладьте его.

Тогда у вас будут правильные сообщения об ошибках, о которых можно будет задать вопросы.

person Anders Marzi Tornblad    schedule 21.12.2011