【问题标题】:IntelliJ change toString for debug mode (variables view)IntelliJ 将 toString 更改为调试模式(变量视图)
【发布时间】:2018-06-06 13:55:57
【问题描述】:

如果我重载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";
    }
}

【问题讨论】:

标签: java debugging intellij-idea


【解决方案1】:

您可以添加自己的。

interface Debuggable {
    String toDebugString();
}

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

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

【讨论】:

  • 听起来像我正在寻找的方向 - 谢谢!很快就会看到它
  • 感谢您的建议!我最终想出了另一个解决方案,从我的角度来看,它更舒适、更好:)
【解决方案2】:

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

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

步骤

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

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

截图

如何获取,以及更多示例

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

优势

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

【讨论】:

    【解决方案3】:

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

    注意变量名左侧的三角形。这比一个不同的toDebuggerString() 方法有用得多。点击三角形查看所有成员字段的值。

    【讨论】:

    • 谢谢!我对这些方法很熟悉,而且很多时候在调试时我有很多变量,进入评估窗口或展开每个变量更加耗时和混乱。所以我已经在使用它们了,但我觉得还不够。
    • @arieljannai 大量局部变量可能表明您需要将函数分解为几个较小的函数。
    • 不幸的是(或幸运的是?)情况并非如此——通常是当我有一些变量并且我想在一个循环中相对快速地跟踪它们,以查看它们是否按我预期的那样变化:)跨度>
    • 我最终想出了一个解决方案,为此我只需要设置一个表达式并且只需要一次 :)
    猜你喜欢
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2012-07-23
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多