Visual Studio Code で Python プログラムを開発しているときに、デバッグで標準ライブラリや外部ライブラリの中に入る方法です。
フォルダ『.vscode』の中にある『launch.json』に、 を追加します。"debugStdLib": true
これで、標準ライブラリや外部ライブラリの中にステップイン (step in, step into) することができました。
また、ライブラリの中にブレークポイントを設定すると、ライブラリの中で止まるようになりました。
debugStdLib の設定をしたことで、『pip でインストールしたライブラリの中』にステップインしたり、ブレークポイントを設定して中断したりできるようになりました。
debugStdLib の意味
Visual Studio Code で debugStdLib にマウスカーソルを当てたら、説明が出てきました。
debugStdLib: Debug standard library code.
デバッグ スタンダード ライブラリー コード。
意味:標準ライブラリのコードをデバッグする。
以前は debugOptions の中に DebugStdLib を書いて設定していた
ところで、以前は "debugOptions": ["DebugStdLib"]
のように、デバックオプションの下に DebugStdLib を書いて設定していました。
いつからか分かりませんが、変更になったみたいです。
デバックオプションが廃止されて、debugStdLib を true/false で設定するように変わっていました。
そしてさらに、また変更するみたいです。
DebugStdLib をやめて justMyCode に変更するらしい
『デバッガにジャストマイコード justMyCode という機能を実装する』という記事と、『debugStdLib を justMyCode で置きかえる』という記事を見ました。
Implement `justMyCode` fine grained control feature in debugger · Issue #159 · microsoft/debugpy · GitHub
https://github.com/microsoft/debugpy/issues/159
Replace setting debugStdLib with `justMyCode` · Issue #4032 · microsoft/vscode-python · GitHub
https://github.com/Microsoft/vscode-python/issues/4032
自分の理解では、今後は "debugStdLib": true
の代わりに "justMyCode": false
を使うと、ライブラリの中をデバッグできるようになるみたいでした。
Visual Studio Code のマニュアルにも、ジャストマイコード justMyCode の説明がありました。
Debugging configurations for Python apps in Visual Studio Code
https://code.visualstudio.com/docs/python/debugging#_justmycode
しかしながら、2019年9月の時点では、自分の環境で "justMyCode": false
を設定してみても効果が無かったです。
以下のような表示が出て、デバッグ実行してみても、ライブラリの中にステップインしたり、ブレークポイントで止めたりすることはできなかったです。
Property justMyCode is not allowed.
問題を表示 No quick fixes available
“justMyCode”: false,
まだ、完全にはリリースしていないのか、それとも自分の設定が正しくないのか。
ちょっと分からなかったです。
とりあえず、今は "debugStdLib": true
でデバッグしています。
デバッグ実行で標準ライブラリや pip でインストールした外部ライブラリの中を見たら勉強がはかどった話
ソースコードは『定義に移動 F12』でパッと見れますが、変数の状態までは分からないです。
そこで、デバッガの設定変更です。
launch.json に "debugStdLib": true
を設定する。
これで、ライブラリの中にブレークポイントを設定すると、そこでの変数がチェックできました。
処理の流れはもちろんですが、Python ロガーの使い方とか、Python クラスの作り方とか、テクニックとか、とても分かりやすく追うことができました。
やっぱり、実際に動かしながら見ると分かりやすかったです。
あと、ライブラリで意図しない動作とか直感的でない動作があったときに、その原因・理由を調べることにも役立っています。
普段は、ライブラリの中までステップインされてしまうと困るので、設定はOFFにしています。
"debugStdLib": false
(ライブラリの中のデバッグはしない)