Как сделать двунаправленную или обратную отладку программ?

Кто-нибудь использовал реверсивный отладчик? Единственный продукт, который появляется в Google - это UndoDB. Это только для Linux.

11 ответов

Решение

Последняя версия GDB 7.0 (выпущенная на этой неделе) поддерживает обратную отладку на ряде платформ (например, родная версия i386 и x86_64 linux, рабочая станция VMware, UndoDB и симуляторы Simics от Virtutech). ftp://ftp.gnu.org/pub/gdb

Он работает с последним предварительным выпуском / предварительной версией рабочей станции VMware 7.0, которая также поддерживает обратную отладку гостей MSWindows с помощью отладчика Visual Studio. Загрузите бесплатную пробную версию рабочей станции 7.0 по адресу http://communities.vmware.com/community/beta/workstation и найдите несколько полезных советов по использованию здесь по адресу http://communities.vmware.com/docs/DOC-10714

В качестве забавной исторической заметки EXDAMS внедрила посмертную обратную отладку в конце 60-х для MULTICS.

Недавно выпущенный gdb-7.0 включает возможность обратной отладки для родного linux x86 и x86_64. Вы можете отладить любую программу Linux, как обычно, включить функцию "записи", и с этого момента, если вы сделаете слишком большой шаг вперед, вы можете сделать шаг назад или назад - продолжить до точки останова.

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

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

Программная всесторонняя отладка началась с системы EXDAMS 1969 года, где она называлась "воспроизведение истории отладочного времени". Отладчик GNU, GDB, поддерживает всевозможную отладку с 2009 года с помощью функции "запись и воспроизведение процесса". TotalView, UndoDB и Chronon являются лучшими всевозможными отладчиками, доступными в настоящее время, но являются коммерческими системами. TOD для Java, кажется, является лучшей альтернативой с открытым исходным кодом, которая использует частичное детерминированное воспроизведение, а также частичный захват трассировки и распределенную базу данных для записи больших объемов информации.

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

Первой такой системой был прототип COPE 1981 года...

Слово, которое вы ищете, может быть "Всезнающая отладка".

Вот один из них: http://www.lambdacs.com/debugger/

На странице UndoDB есть несколько ссылок на (дорогие) коммерческие отладчики.

Да, я использую Virtutech Simics с реверсом с 2005 года. Это невероятно полезно и делает большинство ошибок очень простым для исправления. Особенно те, которые касаются времени и условий гонки, а также многоядерных / потоковых "гейзенгов".

См. http://jakob.engbloms.se/archives/1547, http://jakob.engbloms.se/archives/1554 и http://jakob.engbloms.se/archives/1564 инвентаризации наиболее известного обратного отладчика. попытки на сегодняшний день.

Я думаю, что в VS 2010 должно быть что-то подобное.

Mozilla rr обратная отладка на основе трассировки с открытым исходным кодом

https://github.com/mozilla/rr

Он похож на UndoDB, но бесплатный и с открытым исходным кодом.

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

Вот минимальный пример rr в действии: Как перейти к предыдущей строке в GDB?

Да, я использовал его еще в 90-х годах. Отладчик Watcom C (понимал FORTRAN и большинство других языков) имел возможность позволить вам шагать назад и вперед во времени.

Это здорово, но не большая новая вещь...

Вы можете рассмотреть возможность использования VMware Replay Debugging, доступного в последней версии VMware Workstation, например, см. http://www.replaydebugging.com/2008/08/vmware-workstation-65-reverse-and.html. Вы можете загрузить пробную версию по адресу http://www.vmware.com/products/ws/ и она работает с Visual Studio.

(Отказ от ответственности: я работаю на VMware, хотя не на этом продукте.)

Я использую UndoDB в Linux вместо простого GDB для каждой сессии отладки. Обратная отладка очень полезна и значительно ускоряет отладку. Вы можете начать отладку по признаку проблемы (например, ошибка подтверждения или напечатано какое-то неправильное сообщение) и выполнить отладку в обратном направлении во времени, отыскивая основную причину проблемы.

Другие вопросы по тегам