IntelliJ изменить toString для режима отладки (просмотр переменных) - PullRequest
0 голосов
/ 06 июня 2018

Если я перегружу 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 голосов
/ 06 июня 2018

Вы можете добавить свой собственный.

interface Debuggable {
    String toDebugString();
}

, затем щелкните правой кнопкой мыши переменную в отладчике -> Настроить представления данных -> Java Type Renderer -> + -> Тип: Debuggable

Это будет делать это для любого объекта этого типа для любой программы в будущем.

0 голосов
/ 12 июня 2018

Основываясь на других ответах, у меня появилась идея создать статический класс, который будет предоставлять правильную строку отладки для отладчика .

Итак, я создалтакой класс, который уменьшает количество шагов, необходимых для настройки этих представлений данных, и делает его более гибким и удобным.

Шаги

  1. Установите постоянное выражение для Objects вотладка настраиваемых представлений данных. [*]
  2. Бросьте пакет / класс, который я создал, рядом с вашим кодом
  3. Создайте toDebugString() методы для соответствующих типов данных, и класс предоставит его, если существует,В противном случае, если toString() переопределено, он будет использовать его, а если не существует - будет использовать значение по умолчанию Object.toString().

[*] Этот шагнеобходимо сделать только один раз, поскольку IntelliJ сохраняет это в глобальных настройках.

Снимки экрана

enter image description here enter image description here

Как получить и другие примеры

Публично доступно на моем GitLab - IntelliJ-CustomDebugDataView

Преимущества

  1. Нет необходимости явно устанавливать представление данных для каждого отдельного типа данных, с которым мы работаем.
  2. Представление данных одинаково для всех объектов, поэтому легко отслеживать и контролировать то, что вы хотите видеть.
  3. Минимальное изменение кода, если вы хотите его использовать (один метод).
0 голосов
/ 06 июня 2018

Вы можете нажать Alt-F8 и оценить любое произвольное выражение.Например, введите test1.toDebuggerString() и нажмите Ctrl-Enter.Затем нажмите Ctrl-Shift-Enter, чтобы добавить его значение в окно просмотра.

Обратите внимание на треугольник слева от имени переменной.Это гораздо полезнее, чем просто другой метод toDebuggerString().Вы нажимаете на треугольник, чтобы просмотреть значения всех полей-членов.

...