2.5Kпросмотров
5 августа 2025 г.
Score: 2.7K
Спустя долгое время отсутствия приношу пост 👀 Наверняка вы когда-нибудь сталкивались с тем, что питонячий код/скрипт зависал во время выполнения. В такие моменты очень хочется знать, собственно, в каком месте это происходит... Так вот это довольно легко сделать (по крайней мере на Linux) с помощью дебагера gdb Делается так:
0. Сохраняем локально файл libpython.py. Это нужно, чтобы в gdb стек и код вокруг отображался "по-питонячему" (иначе это будет малопонятный C++). - Для этого открываем CPython на гитхабе - Переключаемся с main ветки на tag с версией питона, которым запущен зависший код - Скачиваем файл libpython.py (например wget https://raw.githubusercontent.com/python/cpython/refs/tags/v3.13.5/Tools/gdb/libpython.py)
1. Подключаемся к зависшему питонячему процессу
sudo gdb -p 68653
2. Подключаем файл
source libpython.py
3. Выбираем нужный поток, если их несколько
info threads - показать все
thread 1 - выбрать первый
4. Смотрим стек
py-bt
5. Смотрим код вокруг
py-list
6. Смотрим переменные
py-locals
7. Двигаемся по стеку выше/ниже
py-up
py-down Все команды можно посмотреть как раз в файле libpython.py, который мы скачивали на шаге 0 Один-два раз это упражнение делаешь - код болеть не будет! 💪