この記事は 「JetBrainsを使い倒す」シリーズ の記事です。
PyCharmをはじめとするJetBrains製品をレビューしたり情報を発信しています。
日本だとVS Code一強のイメージがある。
でも海外の開発者コミュニティを見ていると、PyCharmを本気で使いこなしている人が多い。
自分もメイン開発はPyCharm、数千行を超えるファイルの分割作業や軽い編集はVS Code、Javaを書くときはIntelliJ IDEAという使い分けをしている。
VS Codeの軽さは間違いなく武器だ。
でもPyCharmには、VS Codeの拡張機能だけでは追いつかない「専用に作り込まれた機能」がある。
今回はその中でも、デバッグまわりの意外と知られていない機能を調べてみた。
結論:PyCharmのデバッガーは「止めずに情報を得る」ことに強い
最初に結論を書く。
PyCharmのデバッガーが本当に強いのは、プログラムを止めずに情報を集められるという点だ。
print文をコードに埋め込んでは消す、というサイクルを、
PyCharmは専用の機能で丸ごと不要にしてくれる。
非停止ログブレークポイント
コードにprint文を挿入する代わりに使えるのがこれだ。
ガター(行番号の左の余白)をShiftを押しながらクリックするだけで、
非停止のログブレークポイントを設定できる。
プログラムの実行を一時停止せずに、Breakpoint reached: threads.py:28のような
メッセージだけを記録してくれる。
前方の式をログに残したい場合は、Shiftを押しながらクリックする前にその式を選択しておけばいい。
printを仕込んで、デバッグが終わったら消し忘れる——という経験がある人には刺さる機能だと思う。
コードを一切汚さずに、ログだけ仕込める。
ブレークポイントの「ミュート」
ブレークポイントで止まる必要がなくなったが、削除はしたくない。
そんなときはミュートが使える。
デバッグツールウィンドウのツールバーから「ブレークポイントのミュート」を押すと、
デバッガーセッションを終了せずに通常のプログラム動作を再開できる。
必要になったらミュートを解除すればいい。
削除すると内部設定(条件式など)が失われるが、ミュートならそれを保持したまま一時停止できる。
変数をクリップボードの内容と比較できる
長い文字列が入った変数を、別の長い文字列と比較したいとき。
変数タブでその変数を右クリックし、「クリップボードと値を比較」を選ぶと、
専用の差分ビューアーで違いを確認できる。
テキストファイルから期待する内容をコピーしておいて、
実際の変数の中身とその場で差分を見る、という使い方ができる。
int変数を16進数・2進数で表示できる
ネットワークスクリプトなど、バイナリプロトコルを扱うデバッグをしているとき地味に助かる機能だ。
変数リストでint型の変数を選択し、右クリックから「指定形式で表示」→「16進」を選ぶと、
その場で表示形式を切り替えられる。
エディター上の変数の表示も、リスト側の表示も両方切り替わる。
テンプレートエンジンの中にもブレークポイントを置ける
DjangoやJinja2のテンプレートファイルの中にも、直接ブレークポイントを設定できる。
テンプレートの中で何が起きているかわからず頭を抱える、というバグに対して、
テンプレート言語を先に設定しておけば、通常のPythonコードと同じ感覚でデバッグできる。
リモートデバッグには2つのアプローチがある
SSHでリモートサーバーに繋いでデバッグする方法は、実は2種類ある。
①リモートインタープリター経由
PyCharmを介してプログラムを起動する必要があるが、拡張デバッグ機能を利用できる。
②Pythonリモートデバッグサーバー設定
すでに実行中のプロセスに、後から接続できる。
アプリケーションを明示的に実行できない状況や、事前準備が必要な場面で役立つ。
「PyCharmから起動する」か「すでに動いているものに繋ぐ」か。
状況によって使い分けが必要になる、地味に見落としやすいポイントだと思う。
まとめ
-
非停止ログブレークポイント →
print文を書かずにログだけ取れる - ブレークポイントのミュート → 設定を消さずに一時的に無効化
- クリップボードと値を比較 → 長い文字列の差分をその場で確認
- 16進数・2進数表示 → バイナリプロトコルのデバッグに便利
- テンプレート内デバッグ → Django/Jinja2のテンプレートに直接ブレークポイント
- リモートデバッグの2方式 → 起動するか、既存プロセスに繋ぐか
VS Codeの軽さも好きだが、「デバッグに本気で向き合う」場面では、PyCharmの作り込みに助けられることが多い。
海外の開発者がPyCharmを手放さない理由が、少しわかった気がする。
「JetBrainsを使い倒す」 シリーズでは、
PyCharmをはじめとするJetBrains製品をレビューしたり情報を発信していきます。
👉 ストックをフォローしておくと次の記事を見逃しません!