親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

Djangoでブレークポイントを使ったデバッグをIntellijで設定


Django + Intellijでのデバッグ

Djangoではdjango-debug-toolbarというツールが備わっているため、デバッグではそれを利用している人も多いと思います。
ただ、私はブレークポイントでのデバッグ作業に慣れきっているため、Intellijで設定を行なってデバッグできるようにしました。

設定作業でちょっと苦労したので、備忘がてら下記に設定方法を記します。
既にIntellijにPythonのSDKのpluginがインストールされている前提で話を進めます。

設定作業

まずはSDKにpycharm-debug.eggのパスを通します。
PythonのSDKがインストールされていればpycharm-debug.eggは入っているはずです。

FIle->Project Structure->SDKsと進み、下記のようにClasspathにpycharm-debug.eggを追加しましょう。
※わかりずらいですが、一番下のパスです。

f:id:tomotomo1129:20180525152710p:plain

次にデバッグの設定です。
Run->Edit Configurationsと進み、
Python Remote Debugを追加してください。
下記はもう追加後の画像になりますが、「+」を押下すれば追加できます。

f:id:tomotomo1129:20180525152728p:plain

Python Remote Debugで設定する箇所は以下の3点になります。
Portは今回適当に11111にしました。

f:id:tomotomo1129:20180525152739p:plain

後は上記画面に記載されているスクリプトをコードの中に書けばいいのですが、
僕はurls.pyに記載しました。
スクリプト実行時に通る箇所に書かないと意味がないようです。
プログラムの中にコードを追加しなければいかない点は、他の言語やフレームワークに比べてちょっと嫌な点ですね。

sys.path.appendの中はそれぞれの環境によるので、pycharm-debug.eggが配置されているパスを指定してください。

import sys
 sys.path.append('/Users/ユーザ名/Library/Application/Support/IntellijIdea14/python/pycharm-debug.egg')
 import pydevd
 pydevd.settrace('localhost', port=11111, stdoutToServer=True, stderrToServer=True)

後は下記のように設定したデバッグのNameを選んで、デバッグの虫のボタンを押下してください。

f:id:tomotomo1129:20180525152834p:plain

こんな風に接続待ちになればOKです。

f:id:tomotomo1129:20180525152848p:plain

後はコンソールでいつも通り「python manage.py runserver」と打てばブレークポイントで止まるようになります。
「python manage.py runserver」と打った直後は、pydevd.settrace()を書いてある箇所からデバッグが始まりますが、それは一度最後まで進めてしまえば、いつも通り

Starting development server at http://127.0.0.1:8000/

と出ますので、開発サーバは準備OKです。
後は画面からURLを入力して起動させれば大丈夫です。

理由はわからないのですが、なぜかブレークポイントで止まらないとか画面が開かない、ということがたまにあります。
その時は一度デバックを止めて、コンソールでもCtrl+Cでデバッグのサーバも止めてしまい、普通に実行させてみてください。
その後再度デバックを始めてみると動くことがあります。
なぜだか理由は全然わかりませんが。


詳細!Python 3 入門ノート

詳細!Python 3 入門ノート

スラスラ読める Pythonふりがなプログラミング (ふりがなプログラミングシリーズ)

スラスラ読める Pythonふりがなプログラミング (ふりがなプログラミングシリーズ)

  • 作者: リブロワークス,株式会社ビープラウド
  • 出版社/メーカー: インプレス
  • 発売日: 2018/06/22
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る
みんなのPython 第4版

みんなのPython 第4版