2011年6月12日日曜日

intellijの行ブレークポイントのあれこれ

Intellijのブレークポイントをいじり倒してみたので、メモとして残しておく。

英語力が全く無いので理解が間違ってる部分があるかもだけど・・・。

ブレークポイントを置く方法

実行ステップに対するブレークポイントは、Eclipseと同じように行番号の隣の空白列をクリックすることによっておくことができる。
(行番号は、「menu」→「View」→「Show Line Numbers」で表示される。)

ブレークポイントを置くと、Eclipseと同じようにブレークポイントを示すマークが表示される。









特定のコールスタックの場合のみブレークさせる方法

Intellijでは、ブレークポイント間で依存関係を設定できるため、特定のコールスタックの場合のみブレークさせることができるようになっている。
privateメソッドなどで処理を抽出した場合など、複数箇所から呼び出される場合に使えるかんじになっている。
よく目的のコールスタックまで処理をスキップしようとして再開を連打してたら、目的のとこまで再開をクリックしちゃって最初からやり直しとかあるので、結構便利な機能かなと。

まずは、ブレークしたい行と、ブレークしたいコールスタック上にブレークポイントを置く。
この例だと、処理を中断したいhogeメソッド(7行目)と、hogeメソッドで処理を中断したい呼び出し元(12行目)にブレークポイントをおいている。













次にブレークポイント間での依存関係を設定する。
依存関係の設定は、View BreakPoints(「menu」→「Run」→「View BreakPoints」)で行う。
デフォルトでは、ブレークポイントが下記画像のようにリスト表示される。
右側のTree Viewボタンをクリックするとクラス単位やメソッド単位にグループ化して表示することができるので、見やすくなる。



















今回は、12行目から呼び出された場合のみ7行目を止めたいのでその設定を行う。
設定方法は、処理を中断したい7行目のブレークポイントを選択して、下の方にある「Depends on:」で12行目のブレークポイントを設定してあげる。



















この設定だけだと、処理を中断したくない12行目でも処理が中断されてしまうので、12行目は処理を止めないようにする。
View BreakPointsで12行目のブレークポイントを選択してSuspend policyでNoneを選択すると12行目のブレークポイントはスルーされる。






















静止画だと、実際にデバッグ実行した際の動きを示せないので、実行した結果は割愛。。。


処理を停止せずに標準出力に値のみ出力する方法

デバッグする際に標準出力に値を出力するってよくやると思うけど、これだと「System.out.println」を消し忘れたりするので、ブレークポイントでのコンソール出力機能を使って値を確認する。

この設定も「View BreakPoints」から行うことができる。
値を出力したい行にブレークポイントを設定し、「Log evaluated expression」から、コンソールに出力したい値を設定してあげれば良い。変数名は、補完してくれます。

ちなみに、標準出力には常に値が出力されるのではなく、処理中断の条件と一致した場合にのみ出力されます。
















実際に実行した結果
例がかなり行けてないけど、設定した値がコンソールに出力されていることがわかる。これで、余計な「System.out.println」を使わなくても、標準出力で値の確認ができるようになる。
ただIntellijの場合、「Live Template」の「sysoutv」が非常に便利なんで普通に「System.out.println」使うだろうなと。






条件を設定して処理を中断する方法

これも「View BreakPoints」から設定できる。
右側の「Condition」にBooleanを返す式を書いてあげると、結果がTrueの場合のみ処理が中断される。