IntelliJ更改为调试模式的字符串(变量视图)

时间:2018-06-06 13:55:58

标签: java debugging intellij-idea

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

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

enter image description here

有时,我想在调试中看到的内容与一般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";
    }
}

3 个答案:

答案 0 :(得分:2)

您可以添加自己的。

interface Debuggable {
    String toDebugString();
}

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

将来任何程序都可以为此类型的任何对象执行此操作。

答案 1 :(得分:2)

基于其他答案,我想到了一个静态类,它将为调试器提供正确的调试字符串

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

步骤

  1. 在调试自定义数据视图中为Objects设置常量表达式。 [*]
  2. 将我在代码附近的包/类扔掉
  3. 为相关数据类型创建toDebugString()方法,如果存在,该类将提供它。否则,如果覆盖toString(),它将使用它,如果不存在 - 它将使用defualt Object.toString()
  4. [*] 此步骤只需执行一次,因为IntelliJ会将其保留在全局设置中。

    截图

    enter image description here enter image description here

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

    在我的GitLab上公开发布 - IntelliJ-CustomDebugDataView

    优点

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

答案 2 :(得分:1)

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

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