Комментарии 14
Спасибо, звучит крайне интересно — попробую при следующей возможности.
Сходу несколько вопросов:
- что насчет поддержки версий питона (2/3), операционных систем (win/*nix) и аппаратных платформ (x86/arm)?
- есть какие-то особенности при вызовах нативных функций, например C++ биндинга или ctypes?
- есть в какой-то форме поддержка каких-то видов Concurrent Execution (ThreadPoolExecutor / ProcessPoolExecutor)?
- можно app.pytrace.com запускать локально (успокоить внутреннего параноика)?
Я тестировал начиная с Python 3.6. У самого есть проект на втором питоне, но пока руки не дошли чтоб добавить поддержку или протестировать совместимость.
Все это работает через Cython-модуль, и при первом запуске код трейсера пытается скомпилиться. На MacOS/Linux проблем в теории быть вообще не должно.
Под виндовс, я заметил что необходимо поставить Windows 10 SDK (из MS Build Toolkit), тогда все собирается и работает, если поставить Python x86-64.
ARM если честно, не тестировал.
2. Внутренности выполнения C-кода не записываются. Проблем с вызовом нативного кода возникнуть не должно.
3. Я так и не добрался протестировать асинхронность и многопоточность. Если говорить про реализацию трейсера — сбор событий и запись на диск происходит в разных потоках. Хотелось бы увидеть реальные кейсы с многопоточностью (привет, GIL), а потом принять решение как это лучше реализовать.
4. Да, конечно. Пока не придумал как это лучше запаковать, поэтому для себя удобней использовать онлайн версию. А тут — полные исходники веб-приложения
А есть функция "трассировать до конкретного места"?
Я открыл трассу, трассировщик стоит на функции1 файла1. Я знаю что потом управление получит функция2 в файле2. Как мне перейти на вызов функции2? Трассировать пошагово до нужной точки довольно долго, а ползунком перемотки искать довольно не эффективно, так как я не знаю в какой временной промежуток происходит вызов.
Есть что-то вроде поиска функции по имени или открытия произвольного py-файла и команды " трассируй до этой строки"?
Другое дело если функция слишком незначительная, тогда спасает переход ползунком куда-нибудь в середину + комбинация Step-Out (Step Out Back) — [Shift+Вверх \ Вниз] на клавиатуре.
А поиска пока что нет, я планировал сделать, но боюсь получится полноценное IDE.
P.S. еще можно заигнорить файлы\папки которые не интересны. К сожалению это блеклист, хотя в этом случае был бы полезней Whitelist
Другое дело если функция слишком незначительная, тогда спасает переход ползунком куда-нибудь в середину + комбинация Step-Out (Step Out Back) — [Shift+Вверх \ Вниз] на клавиатуре.
Да, она мелкая и вызывается "глубоко"
А поиска пока что нет, я планировал сделать
В моем случае, помимо поиска, было бы удобно масштабирование графа: например, выделить какой-то промежуток на общем таймлайне (только вызов какой-то вложенной функции, например) и показывать только его. Глядя на общий граф я примерно понимаю где она должна быть, но ее вызов слишком мелкий на общей картине.
В любом случае — работает! Отличный инструмент.
PyTrace — Time Travel Debugger для Python