PyTrace — Time Travel Debugger для Python
Мне часто приходится сталкиваться с отладкой.

Иногда я ставлю точку останова, но понимаю что уже слишком поздно, и надо начинать все сначала.

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

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

Возможно ли лучше понимать запутанный код? А что, если мы сможем понимать такой код, быстрее чем тот, кто его написал?

Встречайте,

PyTrace — это трейсер с возможностями Time-Travel Debugging-а

image


Основные отличия от традиционного отладчика:

  1. Сессия записывается одиножды, а воспроизвести ее можно бесконечное количество раз.
  2. Теперь можно не бояться забыть нажать Step Into, всегда можно вернуться назад, и зайти в интересующию функцию.
  3. Нет больше смысла использовать `print`. Все переменные видны в инспекторе на каждый момент времени.


Также, с помощью встроенного Flame Chart-а, можно быстро «нырять» в интересующий метод и смотреть что же там реально происходило:
image

[Command] + Click для того чтоб призумить на интересующей функции
[Shift]+Click на методе, переносит на момент, когда функция вот-вот вернется.

Туториал по горячим клавишам:
(в текстовом виде)

Что записывается во время выполнения:

  1. Локальные переменные
  2. Входящие и возвращаемые значения
  3. Время, с момента начала записи
  4. Стек вызовов


Также, в replay-файл записывается контент исходных файлов, на момент запуска отладчика.

Для того что попробовать на своем проекте:


1. Установить pip-пакет:
pip install pycrunch-trace

2. Добавить декоратор trace на интересующий метод:
from pycrunch_trace.client.api import trace

@trace
def run():
    some_code()

3. Запустить код!

Реплей будет записан в рабочую директорию. Его можно посмотреть с помощью веб-приложения:
app.pytrace.com
(данные никуда не отправляются, вся работа с записью происходит локально в браузере)

Я обычно добавляю @trace аттрибут на методы Django View.

Интерактивное демо


Рекомендую пройти интерактивное демо, для ознакомления со всеми возможностями.

Ссылки


Гитхаб:
Pip-пакет
Веб-приложение для просмотра записанных сессий
Сайт:
https://pytrace.com/

Видео основного функционала: