IntelliJ IDEA 2025.2 Help

自定义视图

在调试会话期间,IntelliJ IDEA 向您显示有关变量、类型、线程、帧等的信息。 然而,您可能希望专注于特定的运行时细节,并以特定格式过滤或呈现数据。 在这种情况下,IntelliJ IDEA 允许您自定义调试器输出在 调试 工具窗口和编辑器中的显示方式。

自定义线程视图

您可以自定义线程在 框架线程 选项卡上的显示方式。 当您经常在应用程序的线程中导航,并对其特定细节(例如线程所属的组)感兴趣时,这可能会很有帮助。

  • 请右键点击 框架线程 选项卡中的任意位置,然后选择 自定义线程视图

    自定义Threads View菜单项

条目

描述

显示线程组

如果选择此选项,线程会在线程组的层次结构中显示。 拥有树状层次结构在您的程序管理一组相似线程时很有用。 此外,该选项将系统线程与用户定义的线程分开,更便于在列表中导航。

为了使线程出现在特定组中,请在您的程序中使用 java.lang.ThreadGroup

显示合成方法的堆栈帧

指定是否希望查看合成方法的堆栈帧(编译器引入的方法,这些方法在源代码中不存在)。 这样的方法示例是由内部类创建的方法,从而封闭类可以访问其私有成员。

将当前线程移动到顶部

保持当前线程在列表顶部(当 显示线程组 被禁用时)。

显示行号

显示当前执行的行号。 该功能要求应用程序在编译时包含行号信息。

显示类名

显示包含该方法的类的名称。 在执行匿名内部类中的代码时,会显示外部类的名称,后跟一个美元符号和一个数字,例如: MyClass$1

启用此选项在处理继承方法时非常有用,当需要快速区分子类中的方法实现时。

显示软件包名称

显示类的包名称。 默认包中的代码未被标记。 仅当 显示类名 启用时,此选项才会激活。 在类名本身无法消除歧义时使用(例如 java.util.Datejava.sql.Date)。

显示源文件名

显示类对应的源文件名称。

显示方法实参类型

显示方法接收的参数类型。 这在处理同一方法的重载版本时很有用。

自定义数据视图

IntelliJ IDEA 允许您配置您想要获取的变量信息。 例如,您可以选择显示/隐藏实例 ID 或使用 toString 表示查看特定的类集合。

除非另有明确说明,否则这些偏好设置适用于所有显示变量值的地方(变量 选项卡、内联值视图、工具提示等)。

按字母顺序对变量进行排序

如果需要,您可以在 变量 选项卡中强制实施字母顺序。

  1. Ctrl+Alt+S 打开设置,然后选择 设置 | 构建,执行,部署 | 调试器 | 数据视图

  2. 请选择 按字母顺序对变量进行排序 选项。

配置自动表达式评估

调试器分析断点处的语句及其最近的周围语句,以在源代码中找到各种表达式,如 myvar.myfield

如果它们不包含显式的方法调用,调试器会对它们进行求值并在 变量 视图中显示相应的值。

要禁用表达式的自动计算:

  1. Ctrl+Alt+S 打开设置,然后选择 设置 | 构建,执行,部署 | 调试器 | 数据视图

  2. 清除 在“变量”视图中启用自动表达式 选项。

显示/隐藏对象类型

您可以选择是否显示对应引用类型变量的对象类型。

  • 右键点击 变量 选项卡中的任意位置,然后打开或关闭 显示类型

显示的类型是实际对象的类型,而不是保存引用的变量的类型。 如果您想切换声明类型的可见性,请在 Customize Data Views对话框中使用 Declared type选项。

配置特定类型的显示

您可以微调特定类型的显示方式。 此处描述的属性适用于最常见的情况。 如需自定义配置,请参阅 type renderers

  • 变量 选项卡中的任意位置右键点击并选择 自定义数据视图

条目

描述

自动定位到新的局部变量

在单步执行时自动滚动到作用域中出现的新变量。

基于数据流分析预测条件值和异常.

启用编辑器提示,用于基于数据流分析信息预先已知的布尔表达式或异常。 如需更多信息,请参阅 内联变量视图

显示

  • 声明类型 :显示保存对象引用的变量类型。

  • 合成字段 :显示合成字段(例如,内部类的编译器生成字段)。

  • $val 字段作为局部变量 :显示在匿名类中使用的外部变量,就像它们是局部变量一样。 需要 合成字段

  • 完全限定名称 :显示实际类型和声明类型的全限定名称。

  • 对象 id :提供特定实例的 ID,例如, java.util.ArrayList@798。 要显示 ID,需要启用 Show Types 选项。

  • static 字段 :在 变量 选项卡和工具提示中显示静态字段。

  • 静态最终字段 :显示 变量 选项卡和工具提示中的 static final 常量。 需要 static 字段

显示字符串的类型

显示 java.lang.String 实例的类型。 禁用时,可以通过双引号来标识此类型。

显示基元的十六进制值

添加了十六进制格式支持 byteshortintlongchar 类型。 启用后,将显示十进制和十六进制格式。

在数组和集合中隐藏空元素

排除 null 引用,在显示实现 Collection 的数组和类的内容时(不适用于 Map 的子类)。

自动填充可抛出对象的堆栈跟踪

当程序因抛出异常或错误而被挂起时,其栈跟踪中尚无任何元素。 为了填充堆栈跟踪,您必须在此 getStackTrace() 上调用 Throwable。 当 自动填充可抛出对象的堆栈跟踪 启用时,IntelliJ IDEA 会为您执行此操作。

启用集合类的替代视图

选择此选项以更方便的格式显示实现 CollectionMap 的类的内容(例如,将每个映射条目显示为键值对)。

启用 toString() 对象视图

允许您配置哪些类使用 toString() 的结果作为其显示值。 当通过完全限定的类名指定时,此选项也适用于这些类的派生类。 您还可以使用正则表达式语法定义一个类模式,例如:

  • *.Test :所有称为 Test 的类,不管哪个包

  • javax.swing.*javax.swing 包中的所有代码及其所有子包

  • ?est.Tes? :所有以 Tes 开头的类,后跟包中以任何字母开头的任何字母,后跟 est

  • *.T* :所有包中以 T 开头的所有类

自定义类型渲染器

IntelliJ IDEA 允许您为各种类型提供自定义显示格式。 这可以通过使用 renderers 实现。 渲染器是一种与特定类型相关联的特殊表达式,用于控制在调试会话期间如何显示该类型的实例。

在 Variables 选项卡中显示为其字段之一的用户定义对象

渲染器支持包括基本类型和数组在内的所有类型。 此外,渲染器忽略所有访问修饰符,因此即使字段已被封装,您也可以访问任何字段。

在渲染器中,您可以实现任何转换,包括排序和缩减,以生成所需的输出。 您甚至可以利用 sun.misc.Unsafe 在调试过程中显示实际的内存地址(尽管不推荐这样做)。

渲染器在处理自定义集合时尤其有用,因为它们的内容不易读取,您需要一目了然地识别其内容。

添加渲染器

  1. 变量 选项卡中的任意位置右键点击并选择 自定义数据视图

  2. Java 类型渲染器 选项卡上,点击 Alt+Insert 并配置渲染器表达式。

    例如,如果您想根据其 name 字段查看一个对象,请使用 this.name 作为表达式。 如需更高级的配置,请参阅 渲染器属性 章节。

  3. 应用更改并在 变量 选项卡中查看更新的显示。

渲染器属性

条目

描述

呈现器名称

渲染器的名称。 此名称用于管理渲染器,不影响实际数据的显示。

将呈现器应用于类型对象 (完全限定名称)

此渲染器适用的对象类型。 请输入类的完全限定名或点击 浏览 浏览按钮 ,并从列表中选择所需类型。

如果类使用泛型,请使用原始类型。 由于类型擦除,泛型类型在渲染器中无效。

渲染节点时

此选项决定对象本身的显示方式:

  • 显示类型和对象 ID :控制类名称和实例 ID 是否显示。

  • 使用默认渲染器 :按照没有此渲染器时的方式显示对象。 如果您只想自定义对象内容的显示方式,请使用此选项。

  • 使用以下表达式 :允许您使用某些表达式的返回值来显示对象。 所有方法调用和成员变量访问都是相对于呈现的实例。

    例如, this.getName() 将使用 getName() getter 的结果来显示对象。

    按需 选项会禁用表达式的自动计算,并且只有在您明确请求时才会计算结果。

展开节点时

此选项决定对象展开时内容的显示方式。

  • 使用默认渲染器 :显示节点子节点的方式与未使用此渲染器时相同。 如果您只想自定义对象本身的显示方式,这会很有用。

  • 使用以下表达式 :允许您使用一些表达式的返回值来显示节点的内容,例如, this.toArray()。 表达式必须返回原始类型或引用类型的数组。 返回数组的元素用于表示节点的子项。

    测试节点是否可以展开(可选) :添加一个自动检查,验证表示对象的节点是否可以展开。 检查使用指定的布尔表达式,例如 !this.isEmpty()。 表达式在实例上调用,如果计算结果为 true ,调试器将使节点可扩展。

  • 使用表达式列表 :允许您指定多个表达式,每个表达式提供节点子项的不同表示。

    按需 选项会禁用它们的自动计算,仅在您选择特定表达式时进行结果计算。

追加默认子节点

控制对象的字段(在未指定渲染器时通常显示)是否应与表达式结果一起显示。 此选项仅在 使用表达式列表 中可用。

移除渲染器

  1. 变量 选项卡中的任意位置右键点击并选择 自定义数据视图

  2. Java 类型渲染器 选项卡上,选择您将要移除的渲染器,然后点击 Delete。 然后,应用更改。

静默呈现器

您可以暂时禁用渲染器,而不必完全删除它们:

  • 要静音单个 renderer,请右键点击 变量 选项卡中的任意位置,然后选择 自定义数据视图。 在 Java 类型渲染器 选项卡上,取消选中您要静音的renderer旁边的框,并应用更改。

  • 要静音所有渲染器,请右键点击 变量 选项卡中的任意位置,然后选择 忽略呈现器

当需要时,您可以使用相同的步骤取消静音 renderers。

使用注解添加渲染器

您可以使用 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; } }

文本()

指定用于显示渲染对象的表达式。

childrenArray()

指定用于显示渲染对象子元素的表达式。 表达式的返回值必须是一个数组。

hasChildren()

指定检查节点是否应可展开的表达式。

效率提示

在大型项目中使用渲染器

如果您正在处理一个大型项目,并且花费大量时间处理自定义类,那么创建自己的渲染器虽然需要一些时间,但会有所回报。

在渲染器中实现排序

用于显示节点子级的表达式返回一个数组。 由于数组是有序的,您可以对原本无序的结构进行排序,例如 HashMap。 例如,当您拥有一个用户地图并希望按电子邮件地址排序查看时,这很有用。

最后修改日期: 2025年 9月 22日