Sergey Alexandrovich Kryukov
Вам действительно нужно научиться справляться с такими ситуациями во всех случаях, самостоятельно.
Не беспокоиться. Это один из самых простых случаев для обнаружения и исправления. Это просто означает, что некоторый член / переменная некоторого ссылочного типа разыменовывается с помощью и своих экземпляров (нестатических) членов, что требует, чтобы этот член / переменная не была нулевой, но на самом деле она кажется нулевой. Просто запустите его в отладчике, он остановит выполнение, при котором возникает исключение. Поставьте точку останова на этой строке, перезапустите приложение и снова перейдите к этой точке. Оцените все ссылки, включенные в следующую строку, и посмотрите, какая из них пустая, хотя она не должна быть нулевой. После того, как вы это выясните, исправьте код: либо убедитесь, что член / переменная правильно инициализирована ненулевой ссылкой, либо проверьте ее на null и, в случае null, сделайте что-нибудь еще.
Пожалуйста, смотрите также: хотите отобразить следующую запись при нажатии кнопки. но получил ошибку в том случае, если условие следующей функции записи "ссылка на объект не установлена на экземпляр объекта".
Иногда вы не можете сделать это под отладчиком по той или иной причине. Один действительно неприятный случай - это когда проблема проявляется только в том случае, если программное обеспечение построено, когда отладочная информация недоступна. В этом случае вам придется использовать более сложный способ. Во-первых, вам нужно убедиться, что вы никогда не блокируете распространение исключений, обрабатывая их молча (это преступление разработчиков против самих себя, но очень обычное). Вам нужно поймать абсолютно все исключения на самом верхнем кадре стека каждого потока. Вы можете сделать это, если будете обрабатывать исключения этого типа System.Exception
В обработчике вам нужно записать всю информацию об исключениях, особенно System.Exception.StackTrace
:
http://msdn.microsoft.com/en-us/library/system.exception.aspx,
http://msdn.microsoft.com/en-us/library/system.exception.stacktrace.aspx.
Трассировка стека - это просто строка, показывающая полный путь распространения исключения от оператора throw к обработчику. Читая его, всегда можно найти концы. Для ведения журнала лучше всего (в большинстве случаев) использовать класс System.Diagnostics.EventLog
:
http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx.
Удачи,
—СА