Пустая ссылка исключение - источник недоступен
Я использую Visual Studio 2003 с.NET 1.1 (Visual Basic) - да, это устаревшая система и не может быть обновлена. В этой программе есть рабочий процесс, который выполняется в течение 25 минут (в основном, для печати чеков с использованием активных отчетов). Теперь неожиданно для одного из клиентов процесс завершается ошибкой через 20 или более минут, вызывая исключение нулевой ссылки. Я ставлю поле ошибки, как показано ниже -
когда я нажимаю на разрыв, он говорит, что источник не может быть найден в этом месте
Теперь проблема в том, что этот процесс выполняется для 100 сотрудников с вызовами 10 функций, и я не могу продолжать ставить точки отладки для отладки для каждого сотрудника (это может занять несколько часов), чтобы увидеть, где он выдает нулевую ошибку. Я также не мог обернуть все объекты в try catch или null check (для этого просто требуется слишком много файлов и функций). Мне нужно знать, где он ломается!
Я также контролировал память в диспетчере задач, чтобы убедиться, что aspnet не потребляет слишком много памяти, но, похоже, она всегда меньше 120 МБ. Я тоже попробовал GC.Collect() - но без помощи.
Буду признателен, если кто-нибудь сможет мне помочь с отладкой этой проблемы?
Спасибо
2 ответа
Добавьте некоторую старую школу Console.WriteLine("Я работаю над № сотрудника: " + empNo), чтобы точно указать, где вы получите исключение. Теперь вы можете установить условную точку останова на это значение и начать сеанс отладки. Кроме того, иногда простое рассмотрение таблиц базы данных выявляет проблему (какое-то поле пустое)
Попробуйте перехватить исключения на уровне домена приложения и зарегистрировать трассировку стека, чтобы увидеть, где это происходит. Вы можете только показать источник, если доступны PDB для местоположения, где происходит исключение.
Вы можете найти больше информации здесь
Редактировать (больше информации): в основном это позволяет вам перехватывать каждое исключение, которое не обрабатывается одним методом. Попробуйте записать сообщения об исключениях и их трассировки стека в файл журнала. Лучше было бы рекурсивно циклически проходить через InnerExceptions, чтобы действительно найти источник ошибки. После того, как вы нашли его, вы можете отладить его вручную, потому что вы будете знать, где устанавливать точки останова.