Отладка в Python: 2016 edition
Moscow Python 2016
О докладчике
Имя ему - Кирилл Борисов
10 лет программирует за деньги
5,5 лет души не чает в Python
Работает в Яндексе и не знает забот
3
О чем этот доклад?
Вся наша жизнь - отладка
Иногда она случается и в продакшене
Есть много инструментов
Не нужно паниковать
4
Подходы к отладке в Python
Явное инструментирование кода
sys.settrace(func) / threading.settrace(func)
Требуют модификации кода
Подвержены влиянию кода пользователя
Подключение к интерпретатору
Можно подключаться к работающему процессу
Отлаживается не код на Python
5
Классификация: UI
GUI - графический интерфейс
PuDB
PyCharm, PyDev, WinPDB
CLI - командная строка
pdb, ipdb, rpdb
gdb + python-debuginfo
trepan2 + trepan2kc (trepan3 + trepan3kc)
6
Классификация: условия отладки
Локальная отладка
PyCharm, PyDev, WinPDB
PuDB
Удаленная отладка
rpdb, WinPDB + rpdb2
PyCharm, PyDev
trepan2 + trepan2kc (trepan3 + trepan3kc)
7
pdb
Входит в стандартную библиотеку
Основан на модуле bdb
Самый базовый CLI
Post-mortem, вызов по исключению и т.д.
8
rpdb
https://tamentis.com/projects/rpdb/
Обертка над pdb для удаленной отладки
Достаточно подключиться через nc, telnet и т.д.
Предназначался для отладки кода на Jython под Tomcat
9
ipdb
https://github.com/gotcha/ipdb
Отладчик из IPython
Автодополнение, подсветка кода и т.д.
Краткие traceback’и
10
python2-trepan
https://github.com/rocky/python2-trepan/
Попытка переписать pdb c нуля
Более гранулярная отладка
Умеет извлекать информацию из байткода
Поддерживает макросы
11
python3-trepan (trepan3k)
https://github.com/rocky/python3-trepan/
Попытка переписать pdb c нуля
Версия python2-trepan
Поддерживает 3.3 - 3.5
12
PuDB
https://github.com/inducer/pudb
Оконный интерфейс в текстовом режиме
Интеграция с IPython
Поддерживает удаленную отладку
13
Отладчик из PyDev (и PyCharm)
https://github.com/fabioz/PyDev.Debugger
Разрабатывался в составе PyDev (IDE, основанный на Eclipse)
Способен работать удаленно через pydevd
Поддерживает Python 2.4+
14
WinPDB
https://github.com/bluebird75/winpdb
Сделан на wxPython
Удаленная отладка через rpdb2
Поддерживает Python 2.5 - 3.5, PyPy
Имеет консольную версию
15
Экзотика
smiley - трассировка хода выполнения
manhole - вывод traceback всех потоков
pyrasite - инъекция кода в приложение
16
smiley
https://github.com/dhellmann/smiley
Трассировка хода выполнения программы
Запись всех изменений переменных
Клиент-серверная модель
Имеет веб-интерфейс
17
manhole
https://github.com/ionelmc/python-manhole
Выброс traceback’а всех потоков по сигналу
Запуск shell’а внутри исполняемого кода
В качестве клиента - netcat / socat / telnet
18
pyrasite
https://github.com/lmacken/pyrasite
Запуск произвольного кода внутри уже запущенного процесса
Использует gdb в качестве инструмента
pyrasite-gui, pyrasite-shell, pyrasite-memory-viewer
19
Дополнительные материалы
Python Debugger Uncovered
https://www.youtube.com/watch?v=2sEPipctTxw
How I built a power debugger out of the standard library and things I found on the internet
https://www.youtube.com/watch?v=g8kF9tuYZ6s
Architecture of Open Source Applications: GDB
http://www.aosabook.org/en/gdb.html
20
Дополнительные материалы
pdb – Interactive Debugger
https://pymotw.com/2/pdb/
bdb — Debugger framework
https://docs.python.org/2/library/bdb.html
Advanced Python Debugging Techniques Using GDB
https://www.youtube.com/watch?v=rB9rPdMRxIA
21