46
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

gumi Inc.Advent Calendar 2016

Day 20

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

Posted at

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にして使うようにすると良いと思います。
設定は面倒ですが、かなり便利な機能なので、是非オススメです。

46
39
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?