5

如果我重载toString(),IntelliJ 中的调试器将Object.toString()在变量选项卡中的相关对象附近显示结果。

如果toString重载return "Test1: This is toString overload";::

在此处输入图像描述

有时,我想在调试中看到的与一般的toString重载不同。我知道可以为特定类型/类/等设置另一个表达式,但只能从设置中。

有没有办法(全局)设置一个任意函数名,当这样的函数存在时优先toString

例如:
如果Object.toDebuggerString()存在则使用它,否则 - 使用Object.toString()

class Test1 {
    @Override
    public String toString() {
        return "Test1";
    }
}

class Test2 {
    @Override
    public String toString() {
        return "Test2";
    }

    public String toDebuggerString() {
        return "Testing debugging mode";
    }
}
4

3 回答 3

2

您可以添加自己的。

interface Debuggable {
    String toDebugString();
}

然后在调试器中右键单击一个变量 -> 自定义数据视图 -> Java 类型渲染器 -> + -> 类型:可调试

它将为将来的任何程序的任何此类对象执行此操作。

于 2018-06-06T14:09:05.290 回答
2

根据其他答案,我想到了创建一个静态类,该类将为debugger提供正确的调试字符串

所以我创建了这样的类,它减少了配置这些数据视图所需的步骤数,并使其更加灵活和舒适。

步骤

  1. Objects在调试自定义数据视图中设置常量表达式。[*]
  2. 把我在你的代码附近制作的包/类扔掉
  3. 为相关数据类型创建toDebugString()方法,如果存在,该类将提供它。否则,如果toString()被覆盖,它将使用它,如果不存在 - 它将使用默认值Object.toString()

[*] 此步骤只需执行一次,因为 IntelliJ 将其保存在全局设置中。

截图

在此处输入图像描述 在此处输入图像描述

如何获得它,以及更多示例

在我的 GitLab 上公开可用 - IntelliJ-CustomDebugDataView

优点

  1. 无需为我们正在使用的每种不同数据类型显式设置数据视图。
  2. 所有对象的数据视图都是相同的,因此可以轻松跟踪和控制您想要查看的内容。
  3. 如果您想使用它(一种方法),则对代码进行最小的更改。
于 2018-06-12T13:55:46.107 回答
1

您可以按下Alt-F8并评估任何任意表达式。例如,键入test1.toDebuggerString()并按Ctrl-Enter。然后按Ctrl-Shift-Enter将其值添加到监视窗口。

请注意变量名称左侧的三角形。toDebuggerString()这比仅仅使用不同的方法有用得多。单击三角形可查看所有成员字段的值。

于 2018-06-06T14:03:01.257 回答