Можно ли использовать обратную отладку 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.