Получение имени переменной для NullReferenceException

5

Трассировки стека для NullReferenceException очень неинформативны, они просто включают имя метода и стек вызовов. Любая переменная в методе может быть нулевой, и ее трудно отлаживать, когда ошибка не воспроизводится на машине dev.

Знаете ли вы, как получить дополнительную информацию об этой ошибке, возможно, получить имя переменной? Или у вас есть лучшие способы его отладки?

  • 1
    Вы не можете получить имя переменной. Вы можете определить строку, где произошло исключение.
  • 0
    @Alex Алекс Да, но в производстве требуется распространение файла .pdb. И это также предотвращает использование обфускаторов.
Показать ещё 4 комментария
Теги:
debugging
nullreferenceexception

1 ответ

9
Лучший ответ

Отслеживание этого имени не всегда возможно (это может быть выражение).
И там, где это возможно, это повлечет за собой неприемлемые накладные расходы. Подумайте, что во время выполнения потребуется отслеживать почти все ссылочные переменные, что было бы дорогостоящим и запрещало бы всевозможные оптимизации.

Также см. мой ответ на Осмотрите управляемый стек и сообщение в блоге, на которое он ссылается.

Простым решением является построение более согласованной нулевой проверки в вашем собственном коде:

void Foo(Bar b)
{
   if (b == null) throw new ArgumentNullException(nameof(b));

   ...
}
  • 0
    Это особенно полезно, если вы включаете Debug.AssertNonNull (или как он должен быть) только для проверки работоспособности при дальнейшей отладке.
  • 0
    В чем проблема издержек в состоянии отладки?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню