自定义视图
最后修改时间:2023 年 9 月 5 日在调试会话期间,IntelliJ IDEA 会向您显示有关变量、类、线程、框架等的信息。此外,调试器提供了一系列选项来根据项目的需要自定义数据的显示。
默认情况下,IntelliJ IDEA 在调试工具窗口中呈现组织良好且全面的调试详细信息视图。此布局为您提供最常用的选项和操作。
但是,您可能想要检查一些特定的详细信息或以特定格式过滤或呈现数据。在这种情况下,IntelliJ IDEA 允许您自定义调试工具窗口的默认布局。您可以灵活地创建强大且精细的配置,确保您的类根据您的偏好显示。
自定义线程视图
您可以自定义线程在“框架”和“线程”选项卡上的显示方式。当您使用多线程应用程序并且经常需要访问有关线程的信息时,这可能会很有帮助。
右键单击“框架”或“线程”选项卡中的任意位置,然后选择“自定义线程视图”。
物品 | 描述 |
---|---|
显示线程组 | 如果选择此选项,线程将出现在线程组的层次结构中。当您的程序按组管理许多相似的线程时,拥有树状层次结构非常有用。此外,该选项将系统线程与用户定义的线程分开,从而更容易在列表中导航。 为了使线程出现在特定组中,请 |
显示合成方法的堆栈框架 | 指定是否要查看合成方法(编译器引入的方法,源代码中不存在的方法)的堆栈帧。此类方法的一个示例是由内部类创建的方法,以便封闭类可以访问其私有成员。 |
将当前线程移至顶部 | 将当前线程保留在列表顶部(禁用“显示线程组”时)。 |
显示行号 | 显示当前在帧中执行的行号。此功能要求应用程序使用行号信息进行编译。 |
显示班级名称 | 显示包含该方法的类的名称。当执行匿名内部类中的代码时,将显示封闭类的名称,后跟美元符号和数字,例如: 当您处理继承的方法并且需要快速区分子类中的方法实现时,保持启用此选项非常有用。 |
显示包名 | 显示类的包的名称。默认包中的代码没有标注。仅当启用“显示类名称”时,此选项才处于活动状态。当类名本身无法消除歧义时(例如 |
显示源文件名 | 显示类的源文件的名称。 |
显示方法参数类型 | 显示方法采用的参数的类型。这在处理同一方法的重载版本时非常有用。 |
自定义数据视图
IntelliJ IDEA 允许您配置要获取的变量的哪些信息。例如,您可以选择显示/隐藏实例 ID 或使用toString
表示形式来查看特定的类集。
除非明确指定,否则这些首选项适用于显示变量值的所有位置(变量选项卡、内联值视图、工具提示等)。
按字母顺序对变量进行排序
如果需要,您可以强制“变量”选项卡中的项目按字母顺序排序。
按打开 IDE 设置,然后选择设置 | 构建、执行、部署 | 调试器| 数据视图。CtrlAlt0S
选择按字母顺序排序变量选项。
配置自动表达式评估
调试器分析断点处的语句及其最近的周围语句,以查找源代码中的各种表达式,例如myvar.myfield
.
如果它们不包含显式方法调用,调试器将评估它们并在“变量”视图中显示相应的值。
笔记
在 Groovy 等语言中,无法判断在计算表达式时是否调用了任何方法,并且此类方法调用通常会导致不必要的副作用,因此建议在调试 Groovy 代码时禁用此选项。
要禁用表达式的自动计算:
按打开 IDE 设置,然后选择设置 | 构建、执行、部署 | 调试器| 数据视图。CtrlAlt0S
清除在变量视图中启用自动表达式选项。
显示/隐藏对象类型
您可以选择是否显示对应引用类型变量的对象类型。
右键单击“变量”选项卡中的任意位置,然后打开/关闭“显示类型” 。
显示的类型是实际对象的类型,而不是保存引用的变量的类型。如果要切换声明类型的可见性,请使用“自定义数据视图”对话框中的“声明类型”选项。
配置特定类型的显示
您可以微调特定类型的显示方式。
此处描述的过程和属性允许您配置适用于大多数情况的基本内置选项。对于自定义配置,请参阅类型渲染器。
右键单击“变量”选项卡中的任意位置,然后选择“自定义数据视图”。
物品 | 描述 |
---|---|
自动滚动到新的局部变量 | 单步执行时自动滚动到范围中出现的新变量。 |
根据数据流分析预测条件值和异常。 | 为基于数据流分析的信息预先已知的布尔表达式或异常启用编辑器提示。有关详细信息,请参阅内联变量视图。 |
展示 |
|
显示字符串类型 | 显示 |
显示基元的十六进制值 | 为 |
隐藏数组和集合中的空元素 |
|
自动填充 Throwable 对象的堆栈跟踪 | 当程序在抛出异常或错误后挂起时,其堆栈跟踪中还没有任何元素。要填充堆栈跟踪,您必须调用 |
为 Collection 类启用替代视图 | 选择此选项可以以更方便的格式显示实现 |
启用 toString() 对象视图 | 允许您配置哪些类使用 的结果
|
自定义类型渲染器
IntelliJ IDEA 允许您在调试会话期间为各种对象提供完全自定义的显示格式。这可以通过使用渲染器来实现。渲染器是与特定类型关联的特殊设置,它控制该类型的实例在调试工具窗口中的显示方式。此设置基于自定义表达式,为显示数据提供高度灵活性。
渲染器支持所有类型,包括基元和数组。此外,渲染器会忽略所有访问修饰符,因此您可以访问任何字段,无论它是否被封装。
在渲染器中,您可以实现任何转换(包括排序和缩减)以产生所需的输出。您甚至可以sun.misc.Unsafe
在调试期间使用显示实际的内存地址(尽管不建议这样做)。
当您使用自定义集合时,渲染器特别有用,这些集合的内容不容易阅读,并且您需要一目了然地识别其内容。
笔记
请注意以下事项:
在渲染器中使用大量表达式可能会降低调试性能
应谨慎使用方法调用,因为它们可能会产生副作用
添加渲染器
右键单击“变量”选项卡中的任意位置,然后选择“自定义数据视图”。
在Java类型渲染器选项卡上,单击并根据需要配置新创建的渲染器。 AltInsert
应用更改并在变量视图中预览更新。
提示
如果多个渲染器应用于同一类型(例如,当一个类扩展另一个类并实现某个接口,并且两者都有渲染器时),可以通过根据渲染器的优先级对渲染器列表进行排序来解决冲突。
渲染器属性
物品 | 描述 |
---|---|
渲染器名称 | 渲染器的名称。该名称用于管理渲染器,不会影响实际数据的显示方式。 |
将渲染器应用于类型(完全限定名称)的对象 | 此渲染器应用的对象类型。输入类的完全限定名称或单击“浏览” 并从列表中选择所需的类型。 如果类使用泛型,请为它们使用原始类型。由于类型擦除,菱形运算符内的类型在渲染器中不起作用。 |
渲染节点时 | 该选项决定对象本身的显示方式:
|
扩展节点时 | 此选项确定对象展开时其内容的显示方式。
|
追加默认子项 | 控制对象的字段(在未指定渲染器时通常显示)是否应与表达式结果一起显示。此选项仅适用于“使用表达式列表”。 |
删除渲染器
右键单击“变量”选项卡中的任意位置,然后选择“自定义数据视图”。
在Java 类型渲染器选项卡上,选择要删除的渲染器并单击。然后,应用更改。 Delete
渲染器静音
您可以暂时禁用渲染器,而无需完全删除它们:
要使单个渲染器静音,请右键单击“变量”选项卡中的任意位置,然后选择“自定义数据视图”。在Java 类型渲染器选项卡上,清除要静音的渲染器复选框并应用更改。
要使所有渲染器静音,请右键单击“变量”选项卡中的任意位置,然后选择“静音渲染器”。
需要时,您可以使用相同的过程取消渲染器静音。
使用注释添加渲染器
您可以使用 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 ArrayList courses; Student(String name, ArrayList courses){ this.name=name; this.courses=courses; } }
文本() | 指定用于显示渲染对象的表达式。 |
儿童数组() | 指定用于显示渲染对象的子对象的表达式。表达式的返回值必须是一个数组。 |
有孩子() | 指定用于检查节点是否可扩展的表达式。 |
生产力技巧
感谢您的反馈意见!