Почему обратная отладка редко используется? [закрыто]

57

GDB реализовал поддержку обратной отладки в 2009 году (с GDB 7.0). Я никогда не слышал об этом до 2012 года. Теперь я нахожу это чрезвычайно полезным для определенных типов проблем отладки. Я хотел бы услышать об этом раньше.

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

Знаете ли вы о каких-либо сообществах программистов, где широко используется обратная отладка?

Исходная информация:

  • Stackoverflow: как работает обратная отладка?
  • GDB использует термин «обратная отладка», но другие поставщики используют другие термины для идентичных или похожих методов:
    • Microsoft называет это IntelliTrace или «Историческая отладка»
    • Существует обратный отладчик Java под названием Omniscient Debugger , хотя он, вероятно, больше не работает в Java 6.
    • Есть и другие обратные отладчики Java
    • Отладчик OCaml (ocamldebug) называет это путешествием во времени
Филипп Классен
источник
47
Для пользы тех, кто не знает, что существует, что такое обратная отладка?
Мейсон Уилер
5
MS назвала их системную интеллигентность, которая, похоже, похожа на то, что вы называете отладкой, это может быть связано с несколькими именами в зависимости от среды, что делает ее менее используемой.
Ryathal
1
Как раз того, чего он стоит: он действительно намного старше, чем вы думаете, - Microsoft поддержала его в QuickC (примерно в 1989 или 90-х годах, если память будет служить).
Джерри Гроб
41
@MasonWheeler, явно обратная отладка - это процесс добавления ошибок в код. Я не согласен с предпосылкой ОП, что это необычная практика.
Бен Ли
3
@BenLee, мы называем это отладкой.
OldFart

Ответы:

27

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

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

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

чокнутый урод
источник
1
Очень хороший ответ Я могу подтвердить, что запись стоит дорого. Вы должны включить его непосредственно перед входом в критическую часть своего приложения, что не всегда тривиально. Я также согласен с тем, что «бросить в кадр» часто достаточно хорошо. Однако он плохо работает с циклами или рекурсивными алгоритмами.
Филипп Классен
3
Это до rr ( rr-project.org ). скорость при записи исполнения с использованием rr чуть медленнее. Затем вы можете воспроизводить, вставлять, перематывать, устанавливать наблюдателей в вашей любимой IDE ( github.com/mozilla/rr/wiki/Using-rr-in-an-IDE ) ... То, как вы будете отлаживать свой код, никогда не будет такой же.
jyavenard
11

Как уже упоминалось, производительность является ключевой, например, с помощью обратимой отладки gdb, при запуске чего-то вроде gzip наблюдается замедление в 50 000 раз по сравнению с естественным запуском. Однако есть коммерческие альтернативы: я работаю на Undo undo.io , и наш продукт UndoDB делает то же самое, но с замедлением менее чем в 2 раза. Есть и другие коммерческие обратимые отладчики.

user1839284
источник
1
Интересно, я обязательно попробую. В нескольких статьях говорится, что это бесплатно для некоммерческого использования, но я не нашел никакой информации, подтверждающей это на вашей домашней странице. Это все еще правда? Спасибо за раскрытие вашей принадлежности.
Филипп Классен
2
Каковы цены на Starter и Professional версии UndoDB? Я не вижу их на странице изданий UndoDB.
tcrosley
3
Как вы, ребята, сравниваете с Mozilla rr?
Чиро Сантилли 17 3: 中 at 法轮功 六四 事件
10

Для обзора выбора технологий и продуктов см. Серию постов в блоге, которые я написал около года назад (и некоторые последующие действия с тех пор):

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

И тот факт, что «дешевый дефолт» gdb почти неоправданно медленен и имеет довольно много проблем со стабильностью для всех, кроме самых распространенных целевых систем.

jakobengblom2
источник
4

Из моего опыта работы инженером по продажам в отладчике TotalView люди знают, что он существует, но не думают, что он работает, независимо от (приемлемого или нет) замедления.

Недавно в Кембриджском университете было проведено исследование под названием «Отказ от принятия обратных затрат на отладку для глобальной экономики в 41 миллиард долларов в год» .

Возвращаясь к GDB, я слышал (много), что замедление делает его совершенно непригодным для использования в реальных приложениях.

Лично я хотел бы получить ответ от большего количества людей, использующих обратную отладку в приложениях, отличных от "Hello world!"

SebGR
источник
4
Я думаю, что было бы гораздо лучше связать это исследование, чем спам «Undo Software», притворяющийся темой об исследовании.
Bulwersator
1
На своей прежней работе я работал над созданием обратного отладчика ( ghs.com/products/timemachine.html ). Мы очень интенсивно использовали отладчик, и я могу вам сказать, это было невероятно. Конечно, это было здорово в условиях сильной гонки, но это было нечто большее. Когда обратная отладка включена все время, ваш менталитет об отладке меняется. Вы итерируете меньше, и вы можете быть менее осторожны с тем, как вы тестируете свой код. Вы также можете сохранить прогон выполнения и отправить его кому-нибудь, так что это отлично подходит для поиска ошибок в коде других людей.
скоростной самолет
2

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

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

Итак, давайте подчеркнем две очень важные концепции здесь:

1. Для понимания системы программирования полезно сделать явное состояние

2. Чтобы еще лучше понять систему программирования, воспроизведение последовательности состояний (событий) может очень помочь.

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

-Вне смолки, бумага: http://shaffner.us/cs/papers/tarpit.pdf Основные идеи: избегать, изолировать или сделать состояние явным

-CQRS http://www.cqrs.nu/ Это сочетание двух концепций: сегрегация командных запросов и источников событий. Существуют разные реализации (Java, C #, Scala). Воспроизведение последовательностей Тейта и развитие модели предметной области являются решающими частями здесь.

Если вы действительно уменьшаете масштаб и видите очень широкую картину, вы уже можете видеть, что с «ростом» функционального программирования люди уже ((не) сознательно) притягиваются к fp, потому что это делает состояние явным! Но это относится только к первому пункту: для решения второго нужен еще один концепт, который можно «свободно» описать как функциональное реактивное программирование.

Таким образом, вы можете сказать все хорошо, но кто на самом деле использует CQRS и FRP? Я бы сказал (IMO, потому что у меня нет конкретных цифр), на самом деле, многие компании просто не знают, какая у них работа, эта терминология. Может быть, вы немного погуглили и узнали от предприятий, которые используют CQRS, уже есть истории успеха. FRP тоже медленно растет в качестве примера, который я мог бы привести Netflix: http://techblog.netflix.com/2013/02/rxjava-netflix-api.html, который только что выпустил реализацию RX, которая на самом деле основана на .NET (но имеет реализация Javascript тоже). Таким образом, люди уже сегодня используют эти методы, БОЛЬШОЙ, чтобы понять сложные системы и сделать их еще лучше. Вот почему они используют методы обратной отладки.

AndreasScheinert
источник