Запуск GDB с питоном - PullRequest
       0

Запуск GDB с питоном

0 голосов
/ 15 октября 2019

Как можно запустить gdb с python (в отличие от pdb, что довольно просто)? Например, если у меня есть эта программа:

# hello.py
def squared(num):
    return num * num

print (squared(4))

Я могу запустить gdb с:

$ gdb python
>>> run hello.py

Output/messages ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
16
[Inferior 1 (process 12787) exited normally]
>>> 

Кажется, что «работает» в том, что она печатает 16, но какя бы:

  • Просмотр строк кода в файле (l)?
  • Добавить точку останова из консоли (b)?

1 Ответ

3 голосов
/ 15 октября 2019

GDB не является отладчиком Python. GDB не отлаживает ваш скрипт на Python. Это отладка Python , как в самом исполняемом файле интерпретатора CPython. Для GDB ваш сценарий - это данные, а не код.

Если ваш исполняемый файл Python имеет необходимую отладочную информацию, вы можете установить точки останова в исходном коде C CPython или пройти через исходный код C, но вы не можетеустановите точки останова в вашем скрипте.


Чтобы GDB мог что-либо понять о Python, вам нужно было бы добавить много дополнительного кода, предназначенного для понимания Python и добавления точки останова на уровне Python / перехода на новую строку / и т.д. функциональность. Как это бывает, этот дополнительный код уже существует!

Проект Cython поставляется с расширением GDB , позволяющим смешанную отладку Python / C / Cython, потому что это огромная больпопытаться отладить Cython без такой функциональности. Если вам нужно выполнить смешанную отладку Python / C / Cython, проверьте это. Если вам не нужно выполнять смешанную отладку, придерживайтесь PDB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...