Какой отладчик Java * вы * используете - PullRequest
7 голосов
/ 23 декабря 2010

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

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

Ответы [ 8 ]

11 голосов
/ 23 декабря 2010

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

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

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

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

4 голосов
/ 23 декабря 2010

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

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

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

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

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

3 голосов
/ 23 декабря 2010

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

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

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

1 голос
/ 27 декабря 2010

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

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

1 голос
/ 23 декабря 2010

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

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

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

1 голос
/ 23 декабря 2010

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

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

0 голосов
/ 13 апреля 2014

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

0 голосов
/ 28 декабря 2010

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

...