Подтвердить что ты не робот

Возможно ли сделать шаг назад в pdb?

После того, как я ударил n, чтобы оценить строку, я хочу вернуться и затем нажать s, чтобы перейти к этой функции, если она не удалась. Возможно ли это?

В документах говорится:

j (ump) lineno Установите следующую строку, которая будет выполнена. Доступно только в самом нижнем кадре. Это позволяет вам снова вернуться и выполнить код или перейти вперед, чтобы пропустить код, который вы не хотите запускать.

4b9b3361

Ответ 1

Отладчик GNU, gdb: он очень медленный, поскольку он одновременно отменяет командную команду.

Отладчик Python, pdb: команда jump возвращает вас назад в код, но не отменяет состояние программы.

Для Python по этой причине был создан прототип отладчика python, epdb. Вот тезис и вот программа и код.

Я использовал epdb в качестве отправной точки, чтобы создать живой отладочный отладчик как часть моей степени магистра. Тезис доступен онлайн: Сочетание обратной отладки и живого программирования с визуальным мышлением в компьютерном программировании. В главах 1 и 2 я также рассматриваю большинство исторических подходов к обратному отладке.

Ответ 2

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

https://sourceware.org/gdb/wiki/ReverseDebug

Двунаправленная (или обратная) отладка

Отказоустойчивая отладка чрезвычайно сложна и может иметь ограничение производительности 50.000x. Он также требует обширной поддержки от инструментов отладки. Виртуальная машина Python не обеспечивает обратную поддержку отладки.

Если вы интерактивно оцениваете код Python, я предлагаю попробовать IPython Notebook, которые предоставляют интерактивные оболочки Python на основе HTML. Вы можете легко писать свой код и смешивать и соответствовать порядку. Однако поддержка отладки pdb отсутствует. Существует ipdb, который обеспечивает лучшую историю и средства поиска для введенных команд отладки, но он не выполняет прямые обратные прыжки либо до тех пор, пока Я знаю.

Ответ 3

PyPy начал реализовывать RevDB, который поддерживает обратную отладку.

Он (по состоянию на февраль 2017 года) все еще находится на альфа-этапе, поддерживает только Python 2.7, работает только с Linux или OS X и требует, чтобы вы сами создали Python из специальной версии. Он также очень медленный и использует много оперативной памяти. Чтобы процитировать страницу Bitbucket:

Обратите внимание, что файл журнала обычно растет со скоростью 1-2 МБ в секунду. Предполагая, что размер не является проблемой, ограничивающим фактором являются:

  • Время воспроизведения. Если ваше записанное исполнение заняло более нескольких минут, повторное воспроизведение будет очень медленным. Иногда ему приходится перебирать весь журнал несколько раз за один сеанс. Если ошибка происходит случайным образом, но редко, вы должны запустить запись в течение нескольких минут, а затем убить процесс и повторить попытку, пока вы не получите сбой.
  • Использование ОЗУ для воспроизведения. Требования к ОЗУ в 10 или 15 раз больше для воспроизведения, чем для записи. Если это слишком много, вы можете попробовать с более низким значением для MAX_SUBPROCESSES в файле _revdb/process.py, но он всегда будет в несколько раз больше.

Подробности находятся в блоге PyPy, а инструкции по установке и использованию находятся на Страница версии BitBucket RevDB.