ビューのカスタマイズ
デバッグセッション中、IntelliJ IDEA は変数、型、スレッド、フレームなどの情報を表示します。 ただし、特定のランタイムの詳細に焦点を当て、データをフィルター処理したり、特定の形式でレンダリングしたりすることもできます。 このシナリオでは、IntelliJ IDEA を使用すると、デバッガーの出力が デバッグ ツールウィンドウとエディターに表示される方法をカスタマイズできます。
スレッドビューをカスタマイズする
フレーム タブと スレッド タブでのスレッドの表示方法をカスタマイズできます。 アプリケーションのスレッド内を頻繁に移動し、スレッドがどのグループに属しているかなどの特定の詳細に関心がある場合に役立ちます。
フレーム または スレッド タブの任意の場所を右クリックして、 スレッドビューのカスタマイズ を選択します。

項目 | 説明 |
|---|---|
スレッドグループを表示する | このオプションを選択すると、スレッドはスレッドグループの階層に表示されます。 ツリーのような階層を持つことは、プログラムがグループ内の同様のスレッドの数を管理するときに役立ちます。 また、このオプションは、システムスレッドをユーザー定義のスレッドから分離するため、リスト内を簡単に移動できます。 特定のグループにスレッドを表示するには、プログラムで |
合成メソッドのスタックフレームを表示する | コンパイラーによって導入され、ソースコードに存在しない合成メソッドのスタックフレームを表示するかどうかを指定できる。 例えば、外側のクラスがそのプライベート メンバーにアクセスできるよう、内部クラスによって作成されたメソッドが該当する。 |
現在のスレッドを最上部に移動 | 現在のスレッドをリストの一番上に保持します(スレッドグループを表示する が無効の場合)。 |
行番号を表示する | 現在実行されている行番号を表示します。 この機能を使用するには、アプリケーションが行番号情報付きでコンパイルされている必要があります。 |
クラス名の表示 | メソッドを含むクラスの名前を表示します。 匿名の内部クラス内のコードが実行されると、代わりに囲みクラスの名前が表示され、その後にドル記号と数字が続きます(例: このオプションを有効にしておくと、継承されたメソッドを処理する場合に便利であり、サブクラスのメソッド実装をすばやく区別する必要があります。 |
パッケージ名の表示 | クラスのパッケージの名前を表示します。 デフォルトパッケージのコードはマークされていません。 このオプションは、 クラス名の表示 が有効な場合にのみアクティブになります。 クラス名だけでは除去できないという曖昧さが存在する場合に使用します( |
ソースファイル名の表示 | クラスのソースファイルの名前を表示します。 |
メソッド引数の型を表示 | メソッドが取る引数の型を示します。 これは、同じメソッドのオーバーロードバージョンを扱う場合に便利です。 |
データビューをカスタマイズする
IntelliJ IDEA を使用すると、取得する変数に関する情報を構成できます。 例: インスタンス ID を表示 / 非表示にするか、特定のクラスのセットを表示するために toString 表現を使用するかを選択できます。
明示的に指定されていない限り、これらの設定は、変数値が表示されるすべての場所(変数 タブ、インライン値ビュー、ツールチップなど)に適用されます。
変数をアルファベット順に並べ替え
必要に応じて、 変数 タブでアイテムのアルファベット順を適用できます。
Ctrl+Alt+S を押して設定を開き、 を選択します。
Sort Variables Alphabetically オプションを選択してください。
自動式評価を構成する
デバッガーは、ブレークポイントのステートメントとそれに最も近い周囲のステートメントを分析して、 myvar.myfield などのソースコード内のさまざまな式を見つけます。
明示的なメソッド呼び出しが含まれていない場合、デバッガーはそれらを評価し、対応する値を 変数 ビューに表示します。
式の自動評価を無効にするには:
Ctrl+Alt+S を押して設定を開き、 を選択します。
変数ビューで自動式を有効にする オプションをオフにします。
オブジェクトの型の表示 / 非表示
対応する参照型変数のオブジェクトの型を表示するかどうかを選択できます。
変数 タブ内の任意の場所を右クリックし、 型の表示 をオンまたはオフにします。
表示される型は、実際のオブジェクトの型であり、参照を保持する変数の型ではありません。 宣言された型の表示を切り替えるには、 データビューのカスタマイズダイアログで 宣言された型オプションを使用します。
特定の型の表示を構成する
特定の型の表示方法を微調整できます。 ここで説明するプロパティは、最も一般的なケースに適しています。 カスタム構成については、 型レンダラーを参照してください。
変数 タブの任意の場所を右クリックし、 データビューのカスタマイズ を選択します。
項目 | 説明 |
|---|---|
新規ローカル変数に自動スクロールする | ステップ実行時にスコープに表示される新しい変数に自動的にスクロールします。 |
データフロー解析に基づいて条件値と例外を予測。 | データフロー分析からの情報に基づいて事前にわかっているブール式または例外のエディターヒントを有効にします。 詳細については、 インライン変数ビューを参照してください。 |
表示 |
|
文字列に対して型を表示する |
|
プリミティブの 16 進値を表示する |
|
NULL 配列要素を非表示にする |
|
Throwable オブジェクトのスタックトレースを自動生成する | 例外またはエラーをスローした後にプログラムが中断されると、そのスタックトレースにはまだ要素が含まれていません。 スタックトレースを設定するには、この |
コレクションクラスの代替ビューを有効にする |
|
toString() オブジェクトビューを有効にする | どのクラスが
|
カスタム型レンダラー
IntelliJ IDEA を使用すると、さまざまな型にカスタム表示形式を提供できます。 これは、レンダラーを使用することで実現できます。 レンダラーは 、特定の型に関連付けられた特別な式であり、デバッグセッション中にこの型のインスタンスの表示方法を制御します。

レンダラーは、プリミティブと配列を含むすべての型をサポートします。 また、レンダラーはすべてのアクセス修飾子を無視するため、カプセル化されているかどうかに関係なく、任意のフィールドにアクセスできます。
レンダラーでは、並べ替えや縮小などの変換を実装して、目的の出力を生成できます。 sun.misc.Unsafe を使用して、デバッグ中に実際のメモリアドレスを表示することもできます(ただし、これは推奨されません)。
レンダラーは、コンテンツが読みにくいカスタムコレクションを使用している場合に特に便利であり、一目でコンテンツを特定する必要があります。
レンダラーを追加する
変数 タブの任意の場所を右クリックし、 データビューのカスタマイズ を選択します。
タイプレンダラ タブで、
Alt+Insert をクリックし、レンダラー式を構成します。
例:
nameフィールドに従ってオブジェクトを表示する場合は、式としてthis.nameを使用します。 より高度な設定については、 レンダラーのプロパティ の章を参照してください。変更を適用し、 変数 タブで更新されたプレゼンテーションを確認します。
レンダラーのプロパティ
項目 | 説明 |
|---|---|
レンダラー名 | レンダラーの名前。 この名前はレンダラーの管理に使用され、実際のデータの表示方法には影響しません。 |
型のオブジェクトにレンダラーを適用する (完全修飾名) | このレンダラーが適用されるオブジェクト型。 クラスの完全修飾名を入力するか、 参照 クラスがジェネリクスを使用する場合は、生の型を使用します。 型消去のため、ジェネリクス型はレンダラーでは効果がありません。 |
ノードをレンダリングするとき | このオプションは、オブジェクト自体の表示方法を決定します。
|
ノードを展開するとき | このオプションは、オブジェクトが展開されたときのコンテンツの表示方法を決定します。
|
デフォルトの子を追加 | オブジェクトのフィールド(レンダラーが指定されていない場合に通常表示される)を式の結果とともに表示するかどうかを制御します。 このオプションは 式のリストを使用する でのみ使用可能です。 |
レンダラーを削除する
変数 タブの任意の場所を右クリックし、 データビューのカスタマイズ を選択します。
タイプレンダラ タブで、削除するレンダラを選択し、
Delete をクリックします。 次に、変更を適用します。
レンダラーのミュート
レンダラーを完全に削除せずに一時的に無効にできます。
単一のレンダラーをミュートするには、 変数 タブ内の任意の場所を右クリックし、 データビューのカスタマイズ を選択します。 タイプレンダラ タブで、ミュートするレンダラーのボックスをオフにして、変更を適用します。
すべてのレンダラーをミュートするには、 変数 タブ内の任意の場所を右クリックして、 レンダラーのミュート を選択します。
必要に応じて、同じ手順を使用してレンダラーのミュートを解除できます。
アノテーションを使用してレンダラーを追加する
IntelliJ IDEA の 組み込みのアノテーションを使用して、クラスに型レンダラーを割り当てることができます。 アノテーションは、レンダラーをチームメンバーと共有する必要がある場合に便利です。 一度構成すると、レンダラーを使用しているコードをデバッグするたびに、レンダラーがクラス (およびそのサブクラス) に適用されます。
クラス宣言の直前の行に
@Rendererアノテーションを追加します。例:import org.jetbrains.annotations.Debug.Renderer; @Renderer(text = "name", childrenArray = "courses.toArray()", hasChildren = "courses.!isEmpty()") public class Student { private String name; private List<String> courses; Student(String name, List<String> courses){ this.name=name; this.courses=courses; } }
text() | レンダリングされたオブジェクトを表示するための式を指定します。 |
childrenArray() | レンダリングされたオブジェクトの子を表示する式を指定します。 式の戻り値は配列でなければなりません。 |
hasChildren() | ノードを展開可能にするかどうかを確認するための式を指定します。 |
生産性のヒント
- 大規模なプロジェクトでレンダラーを使用する
独自のレンダラーの作成には時間がかかりますが、カスタムクラスでの作業に多くの時間を費やしている大きなプロジェクトで作業している場合、報われます。
- レンダラーでソート機能を実装する
ノードの子の表示に使用される式は配列を返します。 配列は順序付けされているため、
HashMapのような順序付けされていない構造体に対してソートを実装できます。 これは、たとえばユーザーのマップがあり、メールアドレスごとに並べ替えて表示したい場合に便利です。