Python
Pycharm
gumi Inc.Day 20

PyCharmのリモートデバッグ機能を使ってみる

More than 1 year has passed since last update.

PythonのIDEであるPyCharmの売りとなる機能の一つとしてリモートデバッグ機能があります。
とても便利な機能ですが、使い方を日本語で解説してあるページがあまり無かったので、設定方法や便利な使い方を解説したいと思います。
※PyCharmのバージョンは"Professional 2016.3"で確認しています。

リモートデバッグの必要性

単純な構文ミスや毎回発生するバグなど、ほとんどのケースはローカルのデバッグで解決できます。しかし、環境に依存するバグや、特定のユーザーデータに起因するバグはローカルのデバッグで発見することは難しいです。
また、ローカル上に仮想環境を用意して、そこで実行するケースも多いかと思います。その場合でもリモートデバッグは有効です。

リモートデバッグと呼ばれる機能は2種類あるので、それぞれ説明していきます。

Python Debug Server方式

ローカルでデバッグサーバを起動し、リモートからアクセスさせる形式です。

リモートの準備

まずはリモート環境の準備です。
ローカルのPyCharmをインストールしたディレクトリ内にデバッグ用のアーカイブが置いてあるので、それをリモートサーバの適当な場所にコピーします。

scp /Applications/PyCharm.app/Contents/debug-eggs/pycharm-debug.egg user@host:/path/to/pycharm-debug.egg

リモートサーバで上記のファイルのパスを通します。
環境変数「PYTHONPATH」に追加するか、プログラム上からsys.pathにパスを追加します。

例:sys.pathに追加する場合

import sys
sys.path.append('/path/to/pycharm-debug.egg')

ローカルの準備

次に、ローカルのサーバを呼び出す設定を追加します。

import pydevd
pydevd.settrace(192.168.1.1, port=12345, stdoutToServer=True, stderrToServer=True)

settraceの第1引数はローカルのホスト名(リモートとローカルが別ネットワークにある場合は、お互いにアクセスできるようにする必要があります)。
第2引数はローカルで待ち受けるポート番号になります。

以上で、準備は完了。

デバッグ実行

続いて、ローカルで待ち受けるサーバを起動します。
PyCharmの "Run/Debug Configurations" の設定で、左上の+ボタンから "Python Remote Debug" を選択します。

スクリーンショット 2016-12-19 20.16.58.png

"Local host name" には先程のsettraceの第1引数で設定したローカルのホスト名。
"Port" には第2引数で指定したポート番号を入力します。
OKを押して、ブレークポイントを設定してからデバッグボタンをクリックすると、ローカルで待受状態になります。

リモートサーバのほうは普通にrunserver等で起動するだけです。
これで、ブラウザ等でリモートサーバにアクセスすると、ブレークポイントで停止してローカルのPyCharmからステップ実行等を行うことができます。

remote interpreter方式

こちらはsshで接続して、リモートのインタプリタを使う方式です。
利用頻度は少ないかもしれません。
なお、この方式は有料のProfessinalEditionでしか利用できないようです。

PyCharmの設定画面から"SSH Remote Run plugin"を有効にします。
スクリーンショット 2016-12-19 12.17.27.png

次に 「設定 > Project: server > Project Interpreter」
"Project Interpreter" 横の歯車マークをクリックして、add Remoteを選択します。

SSH Credentialsを選択して、SSHでログインする情報を入力します。
スクリーンショット 2016-12-19 16.02.34.png

path mappings 横のボタンをクリックして、ローカルのapplicationディレクトリとリモートのapplicationディレクトリを追加します。

これでinterpreter一覧にリモートサーバのインタプリタが追加されるので、ローカルで選択して動かすことができます。

最後に

Python Debug Server方式はpydevを実行するかたちになるので、ON/OFFの設定を簡単に切り替えられるようにして、必要なときだけONにして使うようにすると良いと思います。
設定は面倒ですが、かなり便利な機能なので、是非オススメです。