Какой именно объект вызывает «Ссылка на объект не установлена ​​на экземпляр объекта»? - PullRequest
0 голосов
/ 27 ноября 2010

У меня есть DLL, которая работает на сервере, и я не могу отладить ее по многим причинам, я регистрирую ее исключения.
иногда в вызове метода "Object reference not set to an instance of an object" содержится около 20 параметров, от которых у меня уходит много времени, чтобы узнать, где находится объект, вызывающий исключение.

Есть ли способ зарегистрировать исключение в случае "Object reference not set to an instance of an object" с именем объекта, вызвавшего исключение?

Ответы [ 3 ]

2 голосов
/ 27 ноября 2010

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

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

1 голос
/ 27 ноября 2010

Если вам известна строка, где происходит исключение, вы можете разобрать сборку с помощью Redgate .NET Reflector Free для получения дополнительной информации!

в противном случае: нет, шансов получить нетимя-параметра, вызвавшее исключение, за исключением того, что есть исключение аргумента (где имя параметра включено в исключение)

0 голосов
/ 27 ноября 2010

Самый простой способ определить, какой объект вызывает это, - подключить отладчик к любому коду, который вы запускаете.Вам, вероятно, потребуется запустить отдельный сервер, на котором работает код, созданный в режиме отладки.В Visual Studio, если вы войдете в пункт меню Debug -> Exceptions ..., у вас будет диалог типов исключений с двумя столбцами.Проверьте брошенный столбец для Общих Исключений Среды исполнения.Затем попробуйте выполнить операцию, в которой выдается исключение.Это самый простой способ определить объект, вызывающий проблему.

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

Вы также можете распечатать всю трассировку стека для ошибки, а не просто сообщение об ошибке.Это может дать вам детали, которые вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...