какой объект вызывает исключение NullReferenceException - PullRequest
0 голосов
/ 03 января 2012

Файл дампа сообщает об исключении NullReferenceException. Я могу видеть трассировку стека, как метод, который вызывает это исключение. Этот метод сам по себе довольно длинный и делает много вещей. Могу ли я как-нибудь определить, какой объект на самом деле был нулевым?

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

! Sosex.mk даст вам смещение IL в точке сбоя. Вы можете использовать эту информацию в сочетании с одним или несколькими из нескольких методов разборки, чтобы увидеть, что происходит. ! sos.U,! sos.dumpil или! sosex.muf разберут метод для вас и позволят вам проверить код в месте сбоя. Чтобы найти соответствующие поля, локальные переменные или аргументы в оптимизированном коде, вам нужно использовать! Sos.dso или! Sosex.mdso, чтобы выгрузить объекты в стек и в регистры, а затем выполнить некоторую исследовательскую работу. ! sosex.mdso позволит вам ограничить вывод количеством вхождений или несколькими механизмами фильтрации.

3 голосов
/ 03 января 2012

A NullReferenceException указывает на отсутствие объекта - такого понятия, как нулевой объект, не существует.Я предполагаю, что вы имеете в виду, какая переменная была равна нулю или, точнее, какое выражение оценивается как нулевое.Нет, ничто не будет указывать на это.

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

Кроме того, если вы используете windbg и можете сделать этоперерыв, когда происходит исключение, это должно дать вам хорошее представление, конечно ...

...