代码之家  ›  专栏  ›  技术社区  ›  arieljannai

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

  •  5
  • arieljannai  · 技术社区  · 6 年前

    如果我超载 toString() ,intellij中的调试器将显示 Object.toString() 结果位于“变量”选项卡中相关对象附近。

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

    enter image description here

    有时,我想在debug中看到的与一般的 弦线 超载。我知道可以为特定类型/类/等设置另一个表达式,但只能从设置中设置。

    是否有方法(全局)设置优先于 弦线 当这种功能存在时?

    例如:
    如果 Object.toDebuggerString() 存在使用它,否则-使用 对象。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 回复  |  直到 6 年前
        1
  •  2
  •   Peter Lawrey    6 年前

    你可以自己添加。

    interface Debuggable {
        String toDebugString();
    }
    

    然后右键单击调试器中的变量-gt;自定义数据视图-gt;java类型渲染器& gt;+& gt;类型:可调试的

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

        2
  •  2
  •   arieljannai    6 年前

    根据其他的答案,我有个主意 静态类,它将提供正确的 调试字符串 对于调试器 .

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

    台阶

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

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

    屏幕截图

    enter image description here enter image description here

    如何得到它,以及更多的例子

    在我的gitlab上公开- IntelliJ-CustomDebugDataView

    优势

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

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

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