IntelliJ idea 11でpythonのリモートデバッグ
Intellij Ideaではpythonのリモートデバッグができるということで試してみました。
Python Pluginを入れる
Preferences(⌘,)からPluginsを選び、「Browse repositories...」ボタンを押します。
「Python」で検索すれば見つかりますのでOKでインストールします
テスト対象を用意
kay frameworkを使ったブログエンジンの「theokayblog」を動かしてみます。
VCS -> Checkout From Version Control -> MercurialでダイアログにRepository URLを入力します
cloneが完了したらNew Projectのダイアログが出ますので 「Create project from existing sources」を選択した状態でNextボタンを押します。
次々にダイアログがでますが、特に設定を変えずに最後のFinishボタンまで押しました。
これでプロジェクトが作成されます。
プロジェクト内のkayディレクトリとmanage.pyはシンボリックリンクになってますので、設定しなおします。
$ cd ~/tmp/theokayblog $ rm kay $ rm manage.py $ ln -s /usr/local/kay/kay kay $ ln -s /usr/local/kay/manage.py manage.py
起動設定をする
Run -> Edit Configrations で表示されるダイアログの左上の+アイコンを押し、python remote debugを選択します。
Nameに名前を入力し、Portに適当なポート番号を入力してOKを押します。
ここではNameに「pythonremotedebug」Portに54321と入れてみました
pycharm-debug.eggをコピーする
Pythonプラグインに含まれているpycharm-debug.eggをPYTHONPATHに通す必要があります。
ファイルは~/Library/Application Support/IntelliJIdea11/python/にありました。
とりあえず、プロジェクトのlib以下にコピーしましたが、本当はもっと適した場所があるのかもしれません。
$ cp ~/Library/Application\ Support/IntelliJIdea11/python/pycharm-debug.egg ~/tmp/theokayblog/lib/
manage.pyを修正
アプリを起動する際にpydevd.settraceを呼び出す必要があります。
とりあえず、if __name__ == '__main__':の上に以下を追記してみました。本当はもっとよいやりかたがあるのかもしれません。
settraceに渡しているportは先ほどEdit Configurationsで入力したものと同じです。
sys.path.append('lib/pycharm-debug.egg') from pydev import pydevd pydevd.settrace('localhost', port=54321, stdoutToServer=True, stderrToServer=True)
intellij側で起動
Run -> Debugで先ほど設定した「pythonremotedebug」を選択します。
このようなウィンドウがでて、接続待ちになったことがわかります
以下のようなエラーになる場合は、その後に表示されるダイアログでSDKを設定します。
アプリを起動
コンソールからプロジェクトのディレクトリで以下を実行します。
$ python manage.py runserver
アプリが起動したら、適当な箇所にブレイクポイントを設定して、ブラウザからアクセスすると、そこで処理がとまります。
F8でステップ実行することができます。
主なキー操作は以下の通り
キー | 処理 |
---|---|
F9 | Resume Program |
F8 | Step Over |
F7 | Step Into |
⌥⇧F7 | Forse Step Into |
⇧F8 | Step Out |
⌃F2 | Stop |
⌃⇧F8 | View Break Point |