У меня есть приложение Python для Google App Engine, которое я хотел бы отлаживать на dev-сервере в Emacs. У меня есть pdb
исполняемый файл, который я создал, так что отладка будет играть хорошо с Emacs:Получение контроля над `pdb` обратно из App Engine в Emacs
$ which pdb
/usr/bin/pdb
$ cat /usr/bin/pdb
#/bin/sh
exec python -m pdb "[email protected]"
В Emacs, я M-x pdb
и получить приглашение Run pdb (like this):
, к которому я вхожу pdb /usr/local/bin/dev_appserver.py /Users/[person]/path/to/app/directory
.
Это начинается хорошо. Я получаю окно с подсказкой (Pdb)
, я могу установить контрольные точки успешно в ранних частях кода, как некоторые из файлов dev_appserver.py
, и использовать команды, например, n
для перехода по строке за раз. Затем я могу ввести c
, чтобы продолжить выполнение программы.
Проблема заключается в том, что, как только движок приложения распечатывает свой обычный запуск INFO
сообщений (в том же буфере происходит сеанс Pdb), я не получаю приглашение (Pdb)
назад, поэтому я не могу введите pdb
команд. Это мой первый раз, используя pdb
и мою первую отладку в Emacs, так что, возможно, я просто делаю что-то неправильно.
Я предлагаю сначала попытаться заставить 'pdb' и движок приложения работать вместе вне' emacs' (http://stackoverflow.com/questions/4497672/appengine-step-by-step-debugging) ... Затем попробуйте добавить еще один уровень сложности. – mgilson
Это не то, как вы используете pdb в appengine. Прочитайте документы https://developers.google.com/appengine/docs/python/tools/devserver#Python_Debugging_with_PDB. Вход pdb подключен к stdin/stdout процесса супервизора в app appververver. Возможно, вам также придется ограничивать потоки. После того, как вы заработаете, вы можете посмотреть, как вы можете запустить dev_server из emacs. Не имел бы понятия, как вы можете это сделать, но сначала запустите базовый pdb, работающий внутри сервера dev. –
@TimHoffman вы можете объяснить разницу в том, как работает PDB, если вы вставляете вызовы в исходный код или вызываете 'dev_appserver.py' с' -m pdb' из терминала? Я понимаю, что если вы вызываете его с терминала, он просто ломается в первой строке кода (в данном случае в 'dev_appserver.py')? Возможно, это не вариант, но я бы предпочел не изменять исходный код только потому, что я хочу его отладить. –