Какой отладчик Java * вы * используете

Я трачу много времени на отладку приложений в Eclipse с использованием JPDA. Есть несколько проблем с отладчиком Eclipse, которые действительно раздражают меня. Кто-нибудь может порекомендовать плагины, лучшие отладчики или трюки, о которых я пока не знаю?

  • На вкладке "Переменные" вы можете ввести и выполнить биты кода Java. Однако сначала вам нужно нажать на что-то (я обычно нажимаю "это"), чтобы придать этому контекст. Затем, после того, как вы ввели длинное Java-выражение для отладки чего-либо и "выполнили" его, ваше выражение заменяется результатом, поэтому вам нужно вводить его заново. Есть ли какой-нибудь лучший способ, например, консоль или что-то, чего мне не хватает?
  • Когда вы просматриваете структуры данных, представление в отладчике оставляет желать лучшего. Вы видите внутреннее представление списков, карт, StringBuilders и т. Д. Я хочу видеть, что эти объекты концептуально содержат. Есть ли способ сделать это, возможно, с помощью какого-либо другого отладчика, или расширения или что-то?
  • Когда создается исключение, существует ли какой-нибудь способ проверки состояния приложения, в котором было создано исключение? В настоящее время мне нужно установить точки останова непосредственно перед тем, как возникнет исключение, а затем попытаться воспроизвести его.
  • Когда я переступаю через строку с множеством операторов, я не могу увидеть, какое из этих выражений выполняется, кроме как "войти" в каждое из них, чтобы увидеть, куда оно меня приведет.
  • Если исходный код не найден, Eclipse просто тупо смотрит на вас. Вы получите полезный экран с надписью "Редактор файлов классов / Исходный код не найден", который совершенно бесполезен. Я бы предпочел иметь возможность шагать по байт-кодам, чтобы я мог хотя бы увидеть, что происходит. Кто-нибудь знает отладчик Java, который делает это лучше, чем Eclipse?

8 ответов

Я уже некоторое время использую отладчик Eclipse и разделяю некоторые ваши опасения. Однако некоторые из упомянутых вами моментов были решены / рассмотрены в отладчике Eclipse:

Структуры данных: в представлении переменных уже есть возможность показать "логическую структуру" списков / наборов / массивов и т. Д. В левом верхнем углу этого представления есть кнопка, чтобы включить это. Вы также можете добавить свои собственные пользовательские представления через настройки Java->Debug->Logical Structures.

Исключения: отладчик позволяет вам устанавливать точки останова исключений (кнопка Добавить точку останова Java Exception в представлении точек останова). Эти точки останова срабатывают, когда выбрасывается конкретное исключение.

Исходный код: если вы устанавливаете плагин (например, плагин asm байт-кода http://asm.ow2.org/eclipse/index.html), в котором есть средство просмотра для байт-кода, отладчик будет проходить по байт-коду, если исходный код отсутствует,

Я согласен со многим из того, что говорит Вилас Джаганнатха.

Использование отладчика Eclipse Дополнительные пункты:

1) Вид дисплея. Это представление позволяет вам запускать код в контексте текущего фрейма стека. Это позволяет вам проверять произвольные биты кода. В некотором смысле это немного примитивно, но отлично работает как блокнот.

4) Если вы хотите перейти к какому-либо вызову метода в строке со сложным выражением, вы можете перейти к этой функции и затем "Run to Line" (Ctrl + R)

5) Вы также можете использовать пошаговые фильтры для фильтрации классов, которые вас не интересуют. Щелкните правой кнопкой мыши по кадру стека, который вам не нужен, и нажмите "Тип фильтра". Убедитесь, что у вас включен "Использовать пошаговые фильтры". Это значок с двумя стрелками справа от кнопки "перетащить в кадр" в представлении "Отладка".

Вот мой ответ - пули находятся в том же порядке, что и ваши вопросы:

  • Есть лучший способ сделать это:
    1. Используйте представление Display для выполнения операторов.
    2. Напишите что-нибудь на самом классе и "осмотрите" это (ctrl+shift+I)
  • Посмотрите на маленький значок в представлении переменных, который говорит: "Показать логическую структуру". Это может быть то, что вы ищете.
  • Вы можете установить общую точку останова на Exception, чтобы перехватывать исключение в том виде, как оно происходит - в исключениях смотрите J! значок.
  • Я использую Ctrl + Alt+ щелчок левой кнопкой мыши на метод, который я хочу использовать, работает как шарм!
  • Вы все еще можете использовать степпинг с помощью клавиш или кнопок (см. Стек). Если вы хотите увидеть код, используйте декомпилятор.

Я верю, что им еще есть, что улучшить, но эти советы могут вам немного помочь.

Я использую NetBeans и его отладчик.

По поводу вашего третьего пункта (исключения): я не думаю, что есть какой-либо другой способ увидеть состояние в точке, где выдается исключение. Когда исключение выбрасывается из метода, кадр стека для этого метода отбрасывается - он теряется, так что вы не можете проверить его в дальнейшем.

Насколько мне известно, отладчик NetBeans также не позволяет перебирать байт-код.

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

Выберите функцию, в которую вы хотите перейти, и используйте "Step Into Selection" (у меня она есть на Ctrl-F5, но вы можете найти ее в контекстном меню).

Обычно, я бы сказал, что у eclipse лучший отладчик, чем у моей предпочтительной IDE, IntelliJ (бесплатная версия). Для первых четырех IntelliJ, возможно, лучше с точками останова на исключениях (которые позволяют видеть состояние в момент, когда выбрасывается исключение) пользовательские средства визуализации для типов объектов и постоянные выражения (т. е. выражение переоценивается при каждом изменении контекста)

Я не знаю ни одного отладчика, который перебирает байт-код.

В качестве альтернативы, вы можете засорить свой код с помощью log.debug и System.out.println, что означает, что вы можете делать все, что захотите!

Для чего-то другого, отличного от графического отладчика, у меня есть проект с именем jdiscript, который позволяет вам создавать сценарии интерфейса Java Debugger. Я обнаружил, что это особенно полезно для устранения проблем, связанных с конфликтами потоков, и для выявления проблем, которые, похоже, возникают спорадически только при производственных нагрузках.

Другие вопросы по тегам