DjangoアプリをVS Code上でデバッグ実行したのでメモ
以下の公式ドキュメントを参照して進めていく。
code.visualstudio.com
デバッグ対象のアプリには公式のDjangoチュートリアル を自分でやってみた際のコードを使用する。
https://github.com/kamatimaru/django-tutorial
手順
2.アクティビティバーのデバッグビューを押す。
3.「launch.json ファイルを作成します」を押す。
5. manage.pyのパスを入力する。
次にDjnagoのmanage.pyのパスを入力するように求められる。
デフォルトでは「${workspaceFolder}/manage.py」となっている。
Djangoチュートリアルに沿って実装した場合、manage.pyの場所は「${workspaceFolder}/mysite/manage.py」となっているはずなので、デフォルト値を修正する。
returnを押す。
6.プロジェクトのrootディレクトリ直下に以下の.vscode/launch.jsonが作成されていることを確認する。
$ ls .vscode/ launch.json $ cat .vscode/launch.json { // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Python: Django", "type": "python", "request": "launch", "program": "${workspaceFolder}/mysite/manage.py", "args": [ "runserver", "--noreload" ], "django": true } ] }
7.launch.jsonを編集する。
「--nothreading」を追加する。
[変更前]
"args": [ "runserver", "--noreload" ],
[変更後]
"args": [ "runserver", "--noreload", "--nothreading" ],
※オプションについて
- --noreload
何故デフォルトで「--noreload」が設定されているのか分からなかった(むしろ開発時にはオートリロードされないのは不便では?と思ってしまった)が、オートリロードを有効にしているとpythonプロセスが2つ起動することが分かった。プロセスが複数存在するとデバッガが追跡する際に不都合があるため、オートリロードはOFFに設定するのかな?と理解している。
- --nothreading
VS Codeの公式ドキュメントの「Debug Python within a container」を読むと、「--nothreading」も設定している。
code.visualstudio.com
Djangoの開発用サーバーはデフォルトではマルチスレッドが有効になっているとのことなので、基本的には上記と同じ理由でOFFにするものと理解している。
--nothreading
Disables use of threading in the development server. The server is multithreaded by default.
9.ブレークポイントを貼ってデバッグする。
例えば以下のようにブレークポイントを貼る
ブラウザをリロードすると、以下のようにブレークポイントを貼った箇所で実行がストップされ、変数のダンプ情報をみることができる。
10.サーバーを停止する。
赤丸のボタンを押す。