ブレークポイントなしでデバッグする
他の言語: English Español 한국어 Português 中文
一般的なデバッグシナリオでは、 プログラムが一時停止するタイミングをデバッガに指示するためにブレークポイントを設定します。 ブレークポイントは通常、さらなる調査の出発点を示す瞬間に対応します。
ブレークポイントをどこに設定するかは難しい問題です。 具体的なコードよりもタイミングに基づいてプログラムを一時停止させたい場合や、正確な行が不明な状況があるかもしれません。

この記事では、IntelliJ IDEAの時停止 (Pause Program)機能について、 これは上記のようなシナリオを含む一部のシナリオでは非常に強力なデバッグ手法である、 少しご紹介します。 その使用例や制限、そして秘密のステップトリックについても議論します。
一時停止とは?
時停止 (Pause Program)はIntelliJ IDEAのデバッガに搭載されている機能で、 任意のタイミングでアプリケーションを一時停止することができます。 さらに、アプリケーションのコードに詳しくなくても、実際には完全に無視してもかまいません。


プログラムを一時停止するには、デバッガのツールバー上で時停止 (Pause Program)をクリックします。 すると、プログラムはそれが行っていることの真ん中で一時停止します。
制限
見た目には、一時停止したプログラムはブレークポイントで一時停止したものと全く同じに見えるかもしれません。 しかし、これはある程度までの話です。


時停止 (Pause Program)をスレッドダンププラスと考えるのが正しいでしょう。 通常どおり変数やスレッドを確認することはできますが、 式の評価 (Evaluate Expression)のようなより高度なデバッグ機能は利用できません。
ユースケース
時停止 (Pause Program)を使用する方法は数え切れないほどあります。 しばしば、それは伝統的なブレークポイントと交互に使用することができます。 しかし、時停止 (Pause Program)を使用する方がより適しているシナリオもあります。 いくつかその例を考えてみましょう。
反応しないアプリ
UIがフリーズした場合、通常はUIスレッドがブロックされているためです。


このケースでは、時停止 (Pause Program)が役立つかもしれません。なぜなら、それにより アプリケーションが反応しない状態のまま一時停止させる ことができ、UIスレッドのコールスタックを調査できるからです。これにより、問題の診断が可能になります。
ソースコードがない
前述した通り、時停止 (Pause Program)を使用すればソースコードを完全に無視することができます。もしそれがあなたにとって不足している場合です。 このシナリオはあまり一般的ではありませんが、それに遭遇したとき、 ブレークポイントは役立たないでしょう。
そこで時停止 (Pause Program)が活躍します。

ロック
デッドロックやライブロックなどの同期問題が疑われる場合、 時停止 (Pause Program)を使用することで問題を引き起こしている正確なスレッドとロックを見つけることができるかもしれません。


この場合、プログラムを一時停止し、スレッドリストを調査します。 それにより、どのスレッドがブロックされているかを表示します。 実行ポイントに移動すると、それらがロックされているクリティカルセクションも表示されます。 この情報は、解決策に向けた手がかりとなるかもしれません。
秘密のステップトリック
前述した通り、時停止 (Pause Program)を使用すると、一部の高度なデバッガ機能へのアクセスが制限されます。 アプリケーションが一時停止している間に特定の機能を使おうとした場合、 一時中止アクションの後にメソッドを評価できません (Cannot evaluate methods after Pause action)というエラーメッセージが表示されることがあります。


しかし、この制限には対処法があります。
アプリケーションを一時停止した後、ステップ実行アクションのいずれかを行います。 ステップイン (Step Into)またはステップオーバー (Step Over)で構いません。 それが終われば、通常のデバッグセッションに入ることができます。 これは、ブレークポイントを使用してアプリケーションを一時停止したときと同じです。 すべての高度な機能が再び利用可能になります!
結論
今日はここまでです!これらのヒントやトリックが役立つことを願っています。
Javaのデバッグについて特定の内容を取り上げて欲しい場合は、どんな些細なことでも遠慮なく連絡してください。あなたのフィードバックが、あなたが最も興味深いと感じるコンテンツの優先順位をつけて公開する助けになります。