Можно ли использовать обратную отладку GDB с Python? Как?

Я пытаюсь использовать обратную отладку GDB с приложением Django. Я запускаю его в GDB, но не могу заставить его работать в обратном направлении.

Я остановил свое приложение Django с помощью Ctrl-Z и затем вошел reverse-next в приглашении gdb появляется сообщение об ошибке "Целевой многопоточный режим не поддерживает эту команду".

Я делаю это неправильно? Разве это не возможно? И то и другое?

3 ответа

Решение

Прежде чем вы сможете использовать GDB для обратной отладки, вы должны указать ему записывать выполнение вашей программы (чтобы он мог ее воспроизвести) через target record Команда, как описано здесь.

Я не уверен, что это поможет вам отладить ваше приложение Django - GDB хорошо подходит для отладки "родного" кода (скомпилировано C/C++), и не очень подходит для отладки "интерпретированного" кода (в прямом или обратном направлении).

RevDB

https://bitbucket.org/pypy/revdb

https://morepypy.blogspot.co.uk/2016/07/reverse-debugging-for-python.html

Этот проект направлен на то, чтобы pdb- как обратная отладка, которая, скорее всего, вам нужна, если только вы не отлаживаете сам интерпретатор Python.

Это все еще на ранних стадиях с 2017 года, и вы должны строить из источника.

Как вопрос, который не упоминает GDB: возможно ли сделать шаг назад в pdb?

Наконец, обратная отладка GDB довольно незрелая, например, не работает с расширениями AVX. Отключите оптимизированные AVX функции в glibc (LD_HWCAP_MASK, /etc/ld.so.nohwcap) для записи valgrind & gdb, поэтому я настоятельно рекомендую использовать rr вместо этого: https://github.com/mozilla/rr (от которого RevDB утверждает, что черпает вдохновение).

Это удивительно хороший вопрос.

Моим первым импульсом было бы убедиться, что я использую IPython в качестве оболочки для django, и посмотреть, поможет ли в этом случае поддержка pdb. Pdb должен иметь интерфейс, очень похожий на gdb. Насколько я помню, gdb - это то, что используется для отладки программ на C/C++, в то время как django выполняется интерпретатором python. Использование Pdb здесь:

http://ericholscher.com/blog/2008/aug/31/using-pdb-python-debugger-django-debugging-series-/

Также вы можете попробовать использовать django-extensions для доступа к представлению отладки werkzeug.

Другие вопросы по тегам