<rmcreative>

RSS

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

6 июня 2012

Случается так, что день потрачен на попытку обнаружить причину ошибки, но дело так и не сдвинулось с мёртвой точки. Например, огромная куча JavaScript ещё вчера работала, а сегодня уже отказывается. Причём проявляется это на тестовом сервере, где эта самая куча сжимается и объединяется в один файл.

Для подобных трудновыловимых ошибок, как, впрочем, и для многих других подходит деление пополам.

Если используется система контроля версий, откатываемся на некоторое время назад и смотрим, есть ли ошибка. Если есть — откатываемся ещё. Если нет — идём вперёд ровно на половину. Так мы получим ревизию, которая всё испортила. Далее дело за малым.

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

Плюс такого подхода в том, что ошибка гарантированно локализуется. Минус — это не быстро.

Комментарии RSS

  1. №6310
    Alexandr Dorogikh
    Alexandr Dorogikh 06.06.2012, 18:53:13

    Двоичный поиск ))) знакомо

  2. №6311
    Алексей
    Алексей 06.06.2012, 20:25:34

    нууу бинарный поиск это долго... давайте заведем для коммитов Дерево ван Эмде Боаса o_O будет лог(лог(n))

  3. №6312
    Alexandr
    Alexandr 06.06.2012, 20:27:31

    Такой же примерно принцип используется в диагностике неисправностей радиоэлектронной техники :)

  4. №6313
    Максим
    Максим 06.06.2012, 21:26:33

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

  5. №6314
    Рустам
    Рустам 06.06.2012, 21:33:37

    В git как раз есть инструмент для этого: git bisect

  6. №6315
    lusever
    lusever 06.06.2012, 22:27:36

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

  7. №6316
    Тима Люмин
    Тима Люмин 06.06.2012, 23:45:39

    lusever, а что, бывает, что разжатого варианта не сущетвует?

  8. №6319
    idle
    idle 07.06.2012, 7:50:09

    Минус — это не быстро.

    Не однозначно. Вопрос быстроты [в данном случае] будет сводиться к степени изолированности изменений в коммитах. Временные расходы по жонглированию коммитами должна брать на себя VCS (см. комментарий Рустама).

  9. №6340
    Михаил
    Михаил 14.06.2012, 6:52:12

    Это называется метод дихотомии. Как-то пришлось его для себя открыть при неработающем htaccess

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.