Emacs: методы отладки python - PullRequest
       3

Emacs: методы отладки python

9 голосов
/ 24 декабря 2010

Я использую emacs для всех моих нужд по редактированию кода. Как правило, я использую Mx-компиляцию для запуска моего тестового прогона, который, я бы сказал, дает мне около 70% того, что мне нужно сделать, чтобы сохранить код в нужном направлении, однако в последнее время я удивлялся, как можно использовать Mx pdb случаи, когда было бы неплохо достичь контрольной точки и осмотреть вещи.

В моем поиске я нашел некоторые вещи , которые указывают на то, что это полезно / возможно. Однако мне не удалось заставить его работать таким образом, чтобы я полностью понимал.

Я не знаю, может быть, это сочетание buildout + appengine, которое может усложнить задачу, но когда я пытаюсь сделать что-то вроде

M-x pdb
Run pdb (like this): /Users/twillis/projects/hydrant/bin/python /Users/twillis/bin/pdb /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/

Где ... / bin / python - компоновщик интерпретатора с путем, заданным для всех яиц.

~ / bin / pdb - это простой скрипт для вызова pdb.main с использованием текущего интерпретатора python

HellooKitty:hydrant twillis$ cat ~/bin/pdb
#! /usr/bin/env python

if __name__ == "__main__":
    import sys
    sys.version_info
    import pdb
    pdb.main()
HellooKitty:hydrant twillis$ 

... / bin / devappserver - это скрипт dev_appserver, который используется в рецепте компоновки для проекта gae, а ... / parts / hydrant-app - это путь к app.yaml

Сначала мне предлагают приглашение

Current directory is /Users/twillis/bin/
C-c C-f

Ничего не происходит, но

HellooKitty:hydrant twillis$ ps aux | grep pdb
twillis    469 100.0  1.6   168488  67188 s002  Rs+   1:03PM   0:52.19 /usr/local/bin/python2.5 /Users/twillis/projects/hydrant/bin/python /Users/twillis/bin/pdb /Users/twillis/projects/hydrant/bin/devappserver /Users/twillis/projects/hydrant/parts/hydrant-app/
twillis    477   0.0  0.0  2435120    420 s000  R+    1:05PM   0:00.00 grep pdb
HellooKitty:hydrant twillis$ 

что-то происходит

C-x [space]

сообщит, что точка останова была установлена. Но я не могу добиться успеха.

Такое ощущение, что мне здесь не хватает чего-то очевидного. Я?

Так стоит ли интерактивная отладка в emacs? Возможна ли интерактивная отладка приложения Google Appengine? Любые предложения о том, как я мог бы заставить это работать?

1 Ответ

4 голосов
/ 31 декабря 2010

Хм. Ты делаешь это немного иначе, чем я. Я не экспериментировал с вашим методом. Я использую модуль библиотеки pdb напрямую, без скрипта-обертки, просто использую опцию командной строки python "-m", чтобы указать python запускать модуль как скрипт.

Чтобы быть чрезмерно тщательным, вот моя последовательность операций:

  1. Я нажал Alt-X в EMACS, набрал "pdb" и вернулся.
  2. EMACS запрашивает у меня «Запустить pdb (как здесь):», и я набираю «python -m pdb myprogram.py».
  3. EMACS создает окно режима отладчика для pdb, где я могу давать команды отладчика и отслеживает выполнение программы в исходном коде.

Полагаю, возможно, есть какая-то причина, по которой это плохо работает с устройством. Я рекомендую сначала заставить его работать с тривиальной программой на Python, и как только вы узнаете, что это работает, попробуйте перейти к полной версии приложения.

На практике я мало занимаюсь отладкой python с помощью pdb. Большая часть моей отладки - это, по сути, «отладка printf», когда я вставил операторы печати в мои модульные тесты и (иногда) в реальный код.

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