2013-12-05 3 views
1

У меня есть приложение 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, так что, возможно, я просто делаю что-то неправильно.

+0

Я предлагаю сначала попытаться заставить 'pdb' и движок приложения работать вместе вне' emacs' (http://stackoverflow.com/questions/4497672/appengine-step-by-step-debugging) ... Затем попробуйте добавить еще один уровень сложности. – mgilson

+0

Это не то, как вы используете 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. –

+0

@TimHoffman вы можете объяснить разницу в том, как работает PDB, если вы вставляете вызовы в исходный код или вызываете 'dev_appserver.py' с' -m pdb' из терминала? Я понимаю, что если вы вызываете его с терминала, он просто ломается в первой строке кода (в данном случае в 'dev_appserver.py')? Возможно, это не вариант, но я бы предпочел не изменять исходный код только потому, что я хочу его отладить. –

ответ

2

@TimHoffman имеет хороший ответ. Dev-сервер перенаправляет pdb из различных реальных серверных процессов, поэтому вы не сможете запустить pdb из командной строки.

Альтернативы, которая могла бы работать, чтобы запустить сервер Dev из командной строки Emacs без PDB, и вставить PDB точки останова в коде

import pdb 
pdb.set_trace() 

Я обычно отлаживать с этим, но не с помощью Emacs.

+0

yep, я в основном использую pdb в коде сейчас и отлаживаю из того же окна терминала, с которого я вызвал dev_appserver. Мне это не нравится, но я не нашел хорошего решения. –

Смежные вопросы