“Работы над моей машиной” - Как исправить невоспроизводимые ошибки?

Это - один способ продвинуть свободный связь .

Со слабой связью, изменение в одном модуле не потребует изменения в реализации другого модуля.

А хорошее использование этого понятия Шаблон "абстрактная фабрика" . В примере Википедии интерфейс GUIFactory производит интерфейс Button. Конкретной фабрикой может быть WinFactory (производящий WinButton), или OSXFactory (производящий OSXButton). Вообразите, пишете ли Вы приложение GUI, и необходимо пойти посмотреть вокруг всех экземпляров OldButton класс и изменение их к WinButton. Тогда в следующем году необходимо добавить OSXButton версия.

33
задан 9 revs, 4 users 72% 29 July 2013 в 06:28
поделиться

22 ответа

Я думаю, что одним из атрибутов хороших отладчиков является то, что у них всегда есть много оружия в их инструментарии. Кажется, что они никогда не «застревают» надолго, и им всегда есть что попробовать. Некоторые вещи, которые я делал, как известно: Я считаю, что ошибка просто перестает работать из-за некоторого страха перед моей настойчивостью. Или клиент понимает, что это, вероятно, проблема с установкой или настройкой на стороне компьютера или клиента.

27
ответ дан 27 November 2019 в 18:08
поделиться

Еще не упомянуто, но «направленная проверка кода» - хорошее решение, особенно если вы не провели надлежащую проверку (по крайней мере, 1 час на 100 строк кода) перед выпуском.

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

0
ответ дан 27 November 2019 в 18:08
поделиться

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

Когда ошибка обнаружена ... Это может произойти по нескольким причинам.

Я уверен, что все ошибки воспроизводимы. Я всегда слежу за такими проблемами ..

  1. Получить системную информацию
  2. о том, какой еще процесс клиент выполнял до этого.
  3. Период времени, когда это происходит. его редкое или частое
  4. следующее действие произошло после проблемы (всегда то же самое или разное)
  5. Найдите факторы для этой ошибки (как разработчик)
  6. Найдите точное место, где возникла эта проблема.
  7. Найдите ВСЕ СИСТЕМНЫЕ факторы за это время
  8. проверьте все утечки памяти или проблемы с ошибками пользователя или неправильные условия в коде
  9. Перечислите всех факторов, которые могут вызвать эту проблему.
  10. Как каждый фактор влияет на это и какие данные содержат эти факторы
  11. Проверить наличие проблем с памятью
  12. проверить, что у клиента есть текущий код обновления, такой как ваш
  13. , проверить весь журнал как минимум за 1 месяц и найти какие-либо аномальные операции. имейте в виду
0
ответ дан 27 November 2019 в 18:08
поделиться

Какими бы сложными ни были невоспроизводимые проблемы - у нас все еще есть структурированный и стратегический подход к их решению - и я могу сказать по опыту, что это требует нестандартного мышления в 50% случаев. случаи. Вообще говоря, можно разделить проблемы на разные типы, что помогает определить, какой инструмент следует использовать. Например, если у вас есть проблема с отказом от воспроизводимого приложения или проблема с памятью, вы можете использовать профилировщики и решить проблему, вызванную конкретной функциональностью.

Кроме того, одним из наиболее важных подходов является ведение журнала с богатой информацией. Я также использую множество перечислений для описания состояния процесса в зависимости от рассматриваемого сценария. например, для описания состояний расписания и сохранения их в БД на разных этапах я использовал такие, как «Инициировано», «Триггер», «Выполняется», «Ожидание исправлено».

0
ответ дан 27 November 2019 в 18:08
поделиться

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

Вот типичные проблемы, которые я видел которые приводят к типам проблем, которые вы описываете:

  1. Среда не настроена должным образом (например, отсутствуют переменные среды, источники данных и т.д.).
  2. Приложение развернуто не полностью (например, схема базы данных не развернута).
  3. Разница в конфигурации операционной системы (кодировка символов по умолчанию является для меня наиболее частой причиной).

В большинстве случаев эти проблемы можно определить по содержимому журнала.

0
ответ дан 27 November 2019 в 18:08
поделиться

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

Для приложений .Net мы также использовали Trace.Writeline, тогда мы можем заставить пользователя запустить DbgView и отправить нам результат.

0
ответ дан 27 November 2019 в 18:08
поделиться

Просто короткий анекдот (отсюда «вики сообщества»): На прошлой неделе я подумал, что в приложении Django было умной идеей импортировать модуль pprint для красивой печати данных Python , только , если DEBUG был True:

if settings.DEBUG:
    from pprint import pprint

Затем я использовал здесь и там pprint в качестве оператора отладки:

pprint(somevar) # show somevar on the console

После завершения работы я протестировал приложение с настройкой DEBUG = False . Вы можете догадаться, что произошло: сайт сломался с ошибками HTTP500 повсюду, и я не знал, почему, потому что нет обратной связи, если DEBUG имеет значение False . Я был озадачен тем, что ошибки волшебным образом исчезли, если я переключился обратно в режим отладки.

Мне потребовалось 1-2 часа, чтобы поместить операторы print по всему коду, чтобы обнаружить, что код вылетает точно при указанном выше pprint () линия. Затем мне потребовалось еще полчаса, чтобы убедить себя перестать биться головой об стол.

Теперь перейдем к морали этой истории:

  1. Не все, что на первый взгляд кажется умной идеей, настолько сообразительно в конце.

  2. Важным моментом, на который следует обратить внимание при отладке этих ошибок, являются все параметры конфигурации и переключатели платформы , которые ваш код делает сам по себе. Это может быть намного больше, чем просто некоторые пользовательские предпочтения. Документируйте хорошо, если вы делаете предположение о платформе пользователя (например, если вы тестируете только Win / Mac / Linux, произойдет ли сбой вашего кода на BSD или Solaris?)

Ура,

Мне потребовалось 1-2 часа, чтобы поместить операторы print по всему коду, чтобы обнаружить, что код дает сбой именно в указанной выше строке pprint () . Затем мне потребовалось еще полчаса, чтобы убедить себя перестать биться головой об стол.

Теперь перейдем к морали этой истории:

  1. Не все, что на первый взгляд кажется умной идеей, настолько сообразительно в конце.

  2. Важным моментом, на который следует обратить внимание при отладке этих ошибок, являются все параметры конфигурации и переключатели платформы , которые ваш код делает сам по себе. Это может быть намного больше, чем просто некоторые пользовательские предпочтения. Документируйте хорошо, если вы делаете предположение о платформе пользователя (например, если вы тестируете только Win / Mac / Linux, произойдет ли сбой вашего кода на BSD или Solaris?)

Ура,

Мне потребовалось 1-2 часа, чтобы поместить операторы print по всему коду, чтобы обнаружить, что код дает сбой именно в указанной выше строке pprint () . Затем мне потребовалось еще полчаса, чтобы убедить себя перестать биться головой об стол.

Теперь перейдем к морали этой истории:

  1. Не все, что на первый взгляд кажется умной идеей, настолько сообразительно в конце.

  2. Важным моментом, на который следует обратить внимание при отладке этих ошибок, являются все параметры конфигурации и переключатели платформы , которые ваш код делает сам по себе. Это может быть намного больше, чем просто некоторые пользовательские предпочтения. Документируйте хорошо, если вы делаете предположение о платформе пользователя (например, если вы тестируете только Win / Mac / Linux, произойдет ли сбой вашего кода на BSD или Solaris?)

Ура,

Затем мне потребовалось еще полчаса, чтобы убедить себя перестать биться головой об стол.

Теперь перейдем к морали этой истории:

  1. Не все, что на первый взгляд кажется умной идеей, настолько сообразительно в конце.

  2. Важным моментом, на который следует обратить внимание при отладке этих ошибок, являются все параметры конфигурации и переключатели платформы , которые ваш код делает сам по себе. Это может быть намного больше, чем просто некоторые пользовательские предпочтения. Документируйте хорошо, если вы делаете предположение о платформе пользователя (например, если вы тестируете только Win / Mac / Linux, произойдет ли сбой вашего кода на BSD или Solaris?)

Ура,

Затем мне потребовалось еще полчаса, чтобы убедить себя перестать биться головой об стол.

Теперь перейдем к морали этой истории:

  1. Не все, что на первый взгляд кажется умной идеей, настолько сообразительно в конце.

  2. Важным моментом, на который следует обратить внимание при отладке этих ошибок, являются все параметры конфигурации и переключатели платформы , которые ваш код делает сам по себе. Это может быть намного больше, чем просто некоторые пользовательские предпочтения. Документируйте хорошо, если вы делаете предположение о платформе пользователя (например, если вы тестируете только Win / Mac / Linux, произойдет ли сбой вашего кода на BSD или Solaris?)

Ура,

  • Важным моментом, на который следует обратить внимание при отладке этих ошибок, являются все параметры конфигурации и переключатели платформы , которые делает ваш код сам по себе. Это может быть намного больше, чем просто некоторые пользовательские предпочтения. Документируйте хорошо, если вы делаете предположение о платформе пользователя (например, если вы тестируете только Win / Mac / Linux, произойдет ли сбой вашего кода на BSD или Solaris?)

  • Ура,

  • Важным моментом, на который следует обратить внимание при отладке этих ошибок, являются все параметры конфигурации и переключатели платформы , которые делает ваш код сам по себе. Это может быть намного больше, чем просто некоторые пользовательские предпочтения. Документируйте хорошо, если вы делаете предположение о платформе пользователя (например, если вы тестируете только Win / Mac / Linux, произойдет ли сбой вашего кода на BSD или Solaris?)

  • Ура,

    0
    ответ дан 27 November 2019 в 18:08
    поделиться

    Недавно я сам исследовал такую ​​проблему. За время работы я узнал, что, хотя компьютерные системы могут быть сложными, они предсказуемы, так что верьте, что вы сможете найти проблему. Мой подход к такого рода проблемам двоякий:

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

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

    При этом учтите:

    1) Какие различия существуют между эта система и другие рабочие системы.

    0
    ответ дан 27 November 2019 в 18:08
    поделиться

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

    0
    ответ дан 27 November 2019 в 18:08
    поделиться

    Я думаю, что отслеживание действий пользователя может привести нас к причинам отказа или выборочных отказов. Но в большинстве случаев пользователи не могут точно описать взаимодействие с приложениями, автоматическое снятие скриншотов (если это настольное приложение. Для приложения .net вы можете проверить UnhandledExceptionHandler Джеффа). Регистрация всех важных действий, которые изменяют состояние объектов, также может помочь нам понять это.

    1
    ответ дан 27 November 2019 в 18:08
    поделиться

    Второй пилот (при условии, что клиент находится где-то холодно и дождливо :)

    1
    ответ дан 27 November 2019 в 18:08
    поделиться

    У меня тоже были эти проблемы. Мое решение заключалось в том, чтобы добавить много журналов и предоставить заказчику отладочную сборку со всей возможной отладочной информацией. Затем убедитесь, что доктор Ватсон (он был в Windows NT) создал дамп памяти с достаточным количеством информации. После загрузки дампа памяти в отладчик я смог выяснить, где и почему он разбился.

    РЕДАКТИРОВАТЬ: О, это, очевидно, работает только в том случае, если приложение резко завершает работу ...

    1
    ответ дан 27 November 2019 в 18:08
    поделиться

    У нас был хороший успех с использованием EurekaLog с отправкой сообщений непосредственно в FogBugz . Это дает нам отчет об ошибке, содержащий стек вызовов, а также соответствующую системную информацию (другие запущенные процессы, память, сетевые данные и т. Д.) И снимок экрана. Иногда клиенты также вводят дополнительную информацию, что оказывается полезным. Безусловно, в большинстве случаев это значительно упрощает и ускоряет исправление ошибок.

    2
    ответ дан 27 November 2019 в 18:08
    поделиться

    Как инженер-программист, занимающийся веб-работой (бронирование / магазин / системы участников и т. Д.), Наиболее важным для нас является получение как можно большего количества информации от клиента.

    Исходя из

    ] он сломан!

    -

    он сломан! и вот скриншоты каждый вариант, который я выбрал, пока создание этого конкретного отчета

    сокращает время, необходимое нам для воспроизведения и устранения проблемы, без конца.

    Это может быть очевидно, но иногда требуется изрядная погоня, чтобы получить такую ​​информацию от наших клиентов ! Но оно того стоит, только в те моменты, когда вы обнаруживаете, что они на самом деле не делают то, что они говорят.

    1
    ответ дан 27 November 2019 в 18:08
    поделиться

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

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

    1
    ответ дан 27 November 2019 в 18:08
    поделиться

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

    Однако вы забываете, что иногда аппаратные средства неисправны. Например, память может работать со сбоями, а некоторый код, требующий интенсивных вычислений, будет вести себя странно, выдавая исключения со странной диагностикой. Конечно, он работает на вашем компьютере, поскольку у вас нет неисправного оборудования.

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

    3
    ответ дан 27 November 2019 в 18:08
    поделиться

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

    Телепатия тоже пригодится ...

    2
    ответ дан 27 November 2019 в 18:08
    поделиться

    Обычная процедура для этого - ожидание чего-то подобного и добавление тонны журнальной информации. Конечно, вы не включаете его с самого начала, но только тогда, когда это происходит.

    Обычно клиенты не любят устанавливать новую версию или некоторые диагностические инструменты. Их работа - не их отладка. И посещение клиента в таких случаях - вариант редко. Вы должны как можно меньше вовлекать клиента. Сменить переключатель и отправить вам файл журнала можно - все, что больше, слишком много.

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

    1
    ответ дан 27 November 2019 в 18:08
    поделиться

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

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

    Клиенты также обычно (вроде) впечатлены тем, что Я знаю об их проблеме, как только они с ней сталкиваются!

    Кроме того, если вы используете обработчик ошибок Application.ThreadException, вы также можете отправлять обратно информацию о неожиданных исключениях!

    6
    ответ дан 27 November 2019 в 18:08
    поделиться

    Обычно помогает подробное ведение журнала.

    10
    ответ дан 27 November 2019 в 18:08
    поделиться

    Самый простой способ - всегда видеть клиента в действии (при условии, что заказчик легко воспроизведет его). Часто проблемы возникают из-за проблем с компьютерной средой клиента, конфликтов с другими программами и т. Д. - это детали, которые вы не сможете уловить на своей установке. Так что посещение сайта может быть полезным; но если это неудобно, такие инструменты, как RealVNC , также могут помочь, позволив вам увидеть, как клиент «делает свое дело».

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

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

    9
    ответ дан 27 November 2019 в 18:08
    поделиться

    Вы можете использовать такие инструменты, как Microsoft SharedView или TeamViewer для подключения к удаленному ПК и проверки проблемы непосредственно на месте. Конечно же, вам понадобится сотрудничество с клиентом.

    .
    0
    ответ дан 27 November 2019 в 18:08
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: