Производственная ошибка веб-приложения ASP.NET для одного пользователя, не может быть воспроизведена в процессе разработки. Как отладить? - PullRequest
4 голосов
/ 20 апреля 2011

Я унаследовал клиентское веб-приложение asp.net, в котором клиенты могут загружать файлы на наши файловые серверы. Он отлично работает для всех пользователей, кроме одного человека. Две недели назад она пыталась загрузить файл и получила следующую ошибку:

Ссылка на объект не установлена ​​для экземпляра объекта.

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

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

Я знаю, что все это звучит очень расплывчато, но я предполагаю, что у меня есть вопрос: есть ли у кого-нибудь хорошие идеи о том, как отследить выполнение пользователя до ошибки, чтобы я мог точно увидеть, какая строка кода действительно вызывает ее? ? Как я уже сказал, я не смог воспроизвести ошибку, в dev, на производстве, внутри, снаружи, и ни у кого другого пользователя не было проблем. Моя единственная идея состояла в том, чтобы опубликовать отладочную версию на нашем производственном сайте, но я не очень хочу этого делать. Спасибо!

1 Ответ

1 голос
/ 20 апреля 2011
  1. Вы УВЕРЕНЫ , что информация, которую вы получаете в исключении, ошибочна? Так легко сделать такое предположение, мы все сделали это, только чтобы оказаться ошибочным, когда вы потратили немного больше времени, глядя на него.
  2. Убедитесь, что у вас развернуты PDB (символы отладки). Вы все равно можете вытолкнуть их, даже если сайт построен в «Release», а не «Debug», чтобы гарантировать, что вы получите соответствующие номера строк в трассировке стека.
    1. Убедитесь, что вы развернули соответствующие .PDB файлы, которые не соответствуют друг другу.
    2. Держите файлы .PDB под контролем версий вместе с вашими релизами, поэтому вам будет намного проще тестировать проблемы, если у вас есть и то, и другое вместе с кодом для этой конкретной версии (то есть обрабатывать ваши скомпилированные выходные данные и файлы .pdb как Вы бы ваш источник).
  3. Добавьте некоторые дополнительные инструменты в код, который регистрирует, используя что-то вроде log4net (не пишите свою собственную систему регистрации - другие люди лучше, чем вы или я!), Которая регистрирует как можно больше состояний вокруг области это сталкивается с проблемой.
    1. Сделайте так, чтобы регистрация могла быть включена или выключена в зависимости от настроек конфигурации. log4net позволяет легко это сделать.
    2. Убедитесь, что ваш лог-код проверяет все объекты, которые он проверяет на нулевое значение, прежде чем использовать их, так что вы не получите NullReferenceException, являющееся вызванным из-за вашей регистрации код.
...