Help us understand the problem. What is going on with this article?

今さらだけどIntelliJ IDEAで使えるJavaのブレークポイントあれこれ

More than 5 years have passed since last update.

IntelliJ IDEAに限った機能ではありませんが、IntelliJ IDEAでJava開発する際に知っておくと便利なブレークポイントを紹介したいと思います。

「そんなの知っている」「今さらJavaか」という声はさておき、この記事をSくんとSさんにささげます。

ブレークポイントの種類

一口にブレークポイントと言っても実は様々な種類があり、色々な条件でプログラムの実行を中断できるようになっています。今回は、以下のブレークポイントを順に説明します。

  • Line Breakpoint
  • Temporary Line Breakpoint
  • Method Breakpoint
  • Exception Breakpoint

Line Breakpoint - 指定した行でストップ

これは誰もがお世話になっているブレークポイントですね。ソースコードの横っちょのバーをクリックするなり、 Ctrl + F8 を押すなりすると赤丸が表示されて有効になります。メインメニューの [Run] - [Toggle Line Breakpoint] でもOKです。

bp1.png

プログラムが指定行に到達すると実行が中断されるので、その時点の変数の値が期待通りか確認するなどして問題解決にあたります。

Temporary Line Breakpoint - 指定した行で1回だけストップ

その名の通り1回限りの一時的なブレークポイントです。実行を中断したい行で Ctrl + Shift + Alt + F8 を押すなり、[Run] - [Toggle Temporary Line Breakpoint] を選択するなりすると以下のスクリーンショットのような赤丸数字1が表示されて有効になります。

bp2.png

プログラムが指定行に到達すると実行が中断されますが、 実行を再開した時点で自動的に消滅します(デバッグ実行が完了した後も復活しません)。 まさに一時的なブレークポイントというわけです。正直なところ、ほとんど使わないです…。

Method Breakpoint - メソッドのIN/OUTを検出してストップ

メソッドブレークポイントは、行に対してではなくメソッドに対して設定するブレークポイントです。実行を中断したいメソッドにカーソルを合わせ、横っちょのバーをクリックするか、[Run] - [Toggle Method Breakpoint] を選択すると、次のスクリーンショットのような赤丸が表示されて有効になります。

bp3.png

メソッドブレークポイントでは、プログラムが指定メソッドに入る時(上の例では13行目)と出るとき(上の例では15行目と22行目)に実行が中断されます。

あるメソッドの事前・事後条件が期待通りか確認したり、複数のreturn文に個別にブレークポイントを設定する手間を省けたりして便利ですが、次の点には注意が必要です。

  • デバッグ実行が遅くなる(IntelliJ IDEAからもひっそりと警告されます)
  • 未処理の例外が発生してメソッドを出る場合は中断されない

Exception Breakpoint - 例外を検出してストップ

例外ブレークポイントは、ソースコードのどこかは分からないけれど、とにかく指定した例外が発生したときに処理を中断するためのブレークポイントです。

設定するには、まずメインメニューから [Run] - [View Breakpoints...] を選択し、以下のブレークポイントダイアログを表示します。(実はこのダイアログは例外ブレークポイントだけのものではなく、すべてのブレークポイントが一覧され、詳細な設定ができる画面になっています)

ダイアログ左上の + ボタンをクリックし、[1. Exception Breakpoints] を選択した後、捕捉したい例外クラスを入力します。

bp4.png

例外ブレークポイントを設定した状態でデバッグ実行すると、その例外が発生した任意の箇所でプログラムの実行が中断されます。例えば、以下の例では20行目に配列境界バグがあるため、swap()メソッドの実行中にIndexOutOfBoundsExceptionが発生しますが、そのタイミングで自動的にプログラムが中断されてデバッグできるようになります。

bp5.png

この例ではすべて自分が管理しているコードでスタック階層も浅いのでありがたみが感じられませんが、未処理例外がアプリのトップレベルまで伝達されてきた時に捕捉するのではなく、発生したその瞬間に捕まえてデバッグしたい場合には重宝します。

まとめと補足

今回は、IntelliJ IDEA Advent Calendar 6日目の記事として、IntelliJでJava開発するときに使えるブレークポイントを簡単に紹介しました。デバッガーの機能の豊富さと、私の気力のなさにより、残念ながら説明できなかったけれど便利な機能は実は他にもまだまだあります。

  • フィールド変数の読み書きを検出してストップ
  • 特定の評価式が成り立つ場合だけストップ
  • ブレークポイント間に依存関係を設定し、あるブレークポイントAにヒットしたときだけ、別のブレークポイントBでストップ
  • (ブレークポイント関係ないけど)実行中断して変数の値を上書き

これらについても整理できたらいいなと思いますが、ひとまず今日のこの記事が誰かの役に立てば幸いです。

最後に、同僚が泣くので IntelliJ IDEA Advent Calendar に参加してやってください!

oohira
rakus
「IT技術で中小企業を強くします!」というミッションを掲げ、中小企業の業務効率化に貢献する複数のクラウドサービスを提供しているIT企業です。「楽楽精算」「メールディーラー」など、国内トップシェアを誇る複数のサービスを開発し、累計導入社数は5万社を超えています。次の時代の"楽"を創るための、まだ見ぬサービスや機能を生み出す取り組みは、今日も続いています。
https://www.rakus.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした