自定义视图
在调试会话期间,IntelliJ IDEA 向您显示有关变量、类型、线程、帧等的信息。 然而,您可能希望专注于特定的运行时细节,并以特定格式过滤或呈现数据。 在这种情况下,IntelliJ IDEA 允许您自定义调试器输出在 调试 工具窗口和编辑器中的显示方式。
自定义线程视图
您可以自定义线程在 框架 和 线程 选项卡上的显示方式。 当您经常在应用程序的线程中导航,并对其特定细节(例如线程所属的组)感兴趣时,这可能会很有帮助。
请右键点击 框架 或 线程 选项卡中的任意位置,然后选择 自定义线程视图。

条目 | 描述 |
|---|---|
显示线程组 | 如果选择此选项,线程会在线程组的层次结构中显示。 拥有树状层次结构在您的程序管理一组相似线程时很有用。 此外,该选项将系统线程与用户定义的线程分开,更便于在列表中导航。 为了使线程出现在特定组中,请在您的程序中使用 |
显示合成方法的堆栈帧 | 指定是否希望查看合成方法的堆栈帧(编译器引入的方法,这些方法在源代码中不存在)。 这样的方法示例是由内部类创建的方法,从而封闭类可以访问其私有成员。 |
将当前线程移动到顶部 | 保持当前线程在列表顶部(当 显示线程组 被禁用时)。 |
显示行号 | 显示当前执行的行号。 该功能要求应用程序在编译时包含行号信息。 |
显示类名 | 显示包含该方法的类的名称。 在执行匿名内部类中的代码时,会显示外部类的名称,后跟一个美元符号和一个数字,例如: 启用此选项在处理继承方法时非常有用,当需要快速区分子类中的方法实现时。 |
显示软件包名称 | 显示类的包名称。 默认包中的代码未被标记。 仅当 显示类名 启用时,此选项才会激活。 在类名本身无法消除歧义时使用(例如 |
显示源文件名 | 显示类对应的源文件名称。 |
显示方法实参类型 | 显示方法接收的参数类型。 这在处理同一方法的重载版本时很有用。 |
自定义数据视图
IntelliJ IDEA 允许您配置您想要获取的变量信息。 例如,您可以选择显示/隐藏实例 ID 或使用 toString 表示查看特定的类集合。
除非另有明确说明,否则这些偏好设置适用于所有显示变量值的地方(变量 选项卡、内联值视图、工具提示等)。
按字母顺序对变量进行排序
如果需要,您可以在 变量 选项卡中强制实施字母顺序。
按 Ctrl+Alt+S 打开设置,然后选择 。
请选择 按字母顺序对变量进行排序 选项。
配置自动表达式评估
调试器分析断点处的语句及其最近的周围语句,以在源代码中找到各种表达式,如 myvar.myfield。
如果它们不包含显式的方法调用,调试器会对它们进行求值并在 变量 视图中显示相应的值。
要禁用表达式的自动计算:
按 Ctrl+Alt+S 打开设置,然后选择 。
清除 在“变量”视图中启用自动表达式 选项。
显示/隐藏对象类型
您可以选择是否显示对应引用类型变量的对象类型。
右键点击 变量 选项卡中的任意位置,然后打开或关闭 显示类型。
显示的类型是实际对象的类型,而不是保存引用的变量的类型。 如果您想切换声明类型的可见性,请在 Customize Data Views对话框中使用 Declared type选项。
配置特定类型的显示
您可以微调特定类型的显示方式。 此处描述的属性适用于最常见的情况。 如需自定义配置,请参阅 type renderers。
在 变量 选项卡中的任意位置右键点击并选择 自定义数据视图。
条目 | 描述 |
|---|---|
自动定位到新的局部变量 | 在单步执行时自动滚动到作用域中出现的新变量。 |
基于数据流分析预测条件值和异常. | 启用编辑器提示,用于基于数据流分析信息预先已知的布尔表达式或异常。 如需更多信息,请参阅 内联变量视图。 |
显示 |
|
显示字符串的类型 | 显示 |
显示基元的十六进制值 | 添加了十六进制格式支持 |
在数组和集合中隐藏空元素 | 排除 |
自动填充可抛出对象的堆栈跟踪 | 当程序因抛出异常或错误而被挂起时,其栈跟踪中尚无任何元素。 为了填充堆栈跟踪,您必须在此 |
启用集合类的替代视图 | 选择此选项以更方便的格式显示实现 |
启用 toString() 对象视图 | 允许您配置哪些类使用
|
自定义类型渲染器
IntelliJ IDEA 允许您为各种类型提供自定义显示格式。 这可以通过使用 renderers 实现。 渲染器是一种与特定类型相关联的特殊表达式,用于控制在调试会话期间如何显示该类型的实例。

渲染器支持包括基本类型和数组在内的所有类型。 此外,渲染器忽略所有访问修饰符,因此即使字段已被封装,您也可以访问任何字段。
在渲染器中,您可以实现任何转换,包括排序和缩减,以生成所需的输出。 您甚至可以利用 sun.misc.Unsafe 在调试过程中显示实际的内存地址(尽管不推荐这样做)。
渲染器在处理自定义集合时尤其有用,因为它们的内容不易读取,您需要一目了然地识别其内容。
添加渲染器
在 变量 选项卡中的任意位置右键点击并选择 自定义数据视图。
在 Java 类型渲染器 选项卡上,点击
Alt+Insert 并配置渲染器表达式。
例如,如果您想根据其
name字段查看一个对象,请使用this.name作为表达式。 如需更高级的配置,请参阅 渲染器属性 章节。应用更改并在 变量 选项卡中查看更新的显示。
渲染器属性
条目 | 描述 |
|---|---|
呈现器名称 | 渲染器的名称。 此名称用于管理渲染器,不影响实际数据的显示。 |
将呈现器应用于类型对象 (完全限定名称) | 此渲染器适用的对象类型。 请输入类的完全限定名或点击 浏览 如果类使用泛型,请使用原始类型。 由于类型擦除,泛型类型在渲染器中无效。 |
渲染节点时 | 此选项决定对象本身的显示方式:
|
展开节点时 | 此选项决定对象展开时内容的显示方式。
|
追加默认子节点 | 控制对象的字段(在未指定渲染器时通常显示)是否应与表达式结果一起显示。 此选项仅在 使用表达式列表 中可用。 |
移除渲染器
在 变量 选项卡中的任意位置右键点击并选择 自定义数据视图。
在 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。 例如,当您拥有一个用户地图并希望按电子邮件地址排序查看时,这很有用。