Как стать автором
Обновить

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

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


  • что насчет поддержки версий питона (2/3), операционных систем (win/*nix) и аппаратных платформ (x86/arm)?
  • есть какие-то особенности при вызовах нативных функций, например C++ биндинга или ctypes?
  • есть в какой-то форме поддержка каких-то видов Concurrent Execution (ThreadPoolExecutor / ProcessPoolExecutor)?
  • можно app.pytrace.com запускать локально (успокоить внутреннего параноика)?
1:
Я тестировал начиная с Python 3.6. У самого есть проект на втором питоне, но пока руки не дошли чтоб добавить поддержку или протестировать совместимость.

Все это работает через Cython-модуль, и при первом запуске код трейсера пытается скомпилиться. На MacOS/Linux проблем в теории быть вообще не должно.
Под виндовс, я заметил что необходимо поставить Windows 10 SDK (из MS Build Toolkit), тогда все собирается и работает, если поставить Python x86-64.

ARM если честно, не тестировал.

2. Внутренности выполнения C-кода не записываются. Проблем с вызовом нативного кода возникнуть не должно.

3. Я так и не добрался протестировать асинхронность и многопоточность. Если говорить про реализацию трейсера — сбор событий и запись на диск происходит в разных потоках. Хотелось бы увидеть реальные кейсы с многопоточностью (привет, GIL), а потом принять решение как это лучше реализовать.

4. Да, конечно. Пока не придумал как это лучше запаковать, поэтому для себя удобней использовать онлайн версию. А тут — полные исходники веб-приложения
НЛО прилетело и опубликовало эту надпись здесь
Надеюсь появится возможность дописывать код во время выполнения, как в дебагере хрома, но с возможностью перемотки. Очень сильно упростит разработку
Как вариант можно попробовать мою предыдущую тулзу (статья)

Конечно на сложных кейсах мгновенного фидбека не будет, но если тестить маленькие куски кода, то можно добиться практически моментальной (<0.5 s) обратной связи от внесения изменений
Вродь ниче так, но косоль(тектрейс) з@сер@ет так, что пришлось отказатся от даного тула.
Согласен, надо будет почистить.
НЛО прилетело и опубликовало эту надпись здесь

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


Есть что-то вроде поиска функции по имени или открытия произвольного py-файла и команды " трассируй до этой строки"?

А вы пробовали искать эту функцию в графе? [G] Из графа, по клику на метод, можно как раз переходить к началу вызова. А если подержать Shift и кликнуть, то переходит в конец метода.

Другое дело если функция слишком незначительная, тогда спасает переход ползунком куда-нибудь в середину + комбинация Step-Out (Step Out Back) — [Shift+Вверх \ Вниз] на клавиатуре.

А поиска пока что нет, я планировал сделать, но боюсь получится полноценное IDE.

P.S. еще можно заигнорить файлы\папки которые не интересны. К сожалению это блеклист, хотя в этом случае был бы полезней Whitelist
Другое дело если функция слишком незначительная, тогда спасает переход ползунком куда-нибудь в середину + комбинация Step-Out (Step Out Back) — [Shift+Вверх \ Вниз] на клавиатуре.

Да, она мелкая и вызывается "глубоко"


А поиска пока что нет, я планировал сделать

В моем случае, помимо поиска, было бы удобно масштабирование графа: например, выделить какой-то промежуток на общем таймлайне (только вызов какой-то вложенной функции, например) и показывать только его. Глядя на общий граф я примерно понимаю где она должна быть, но ее вызов слишком мелкий на общей картине.


В любом случае — работает! Отличный инструмент.

А масштабирование ж есть на графе: Control/Command+Клик

Да, точно: масштабирование в связке с игнорами сильно упрощает жизнь.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории