Я хочу принудительно перевести текущую строку выполнения в определенную строку в той же функции, возможно, пропуская промежуточные строки. Все мои отладчики старой школы имели эту функцию, но я не могу найти ее в eclipse. Есть ли способ сделать это без изменения кода?
Как установить текущую строку выполнения в отладчике eclipse java?
Ответы (5)
Первые два ответа, похоже, не соответствуют теме, если только я не понимаю вопроса.
Насколько я понимаю, функция, которую я искал сам, заключается в том, что вы хотите пропустить несколько строк (при пошаговом выполнении кода) и установить программный счетчик (для использования словаря ассемблера) на заданную строку. Было бы интересно пропустить дорогостоящее создание объектов, увидеть некоторые ситуации с ошибками и т. д. Раньше я делал это в Visual Studio (код C или C++).
Я не нашел этого ни в Eclipse, ни в NetBean. Это может быть ограничение JVM или применение какой-то политики...
Команда Выполнить до строки, конечно же, выполняет все строки между текущей позицией выполнения и назначенной.
Я тоже давно искал эту фичу, а "Бежать в линию" - это не одно и то же.
Это вполне может быть ограничением JVM. Java не реализует goto, хотя в нем есть операторы jump, такие как break и continue. Однако они находятся на уровне блоков. Если это ограничение JVM, я предполагаю, что это, скорее всего, связано с архитектурой безопасности. Строгий контроль над счетчиком программ утомляет злоумышленников, таких как вирусы, и, к сожалению, отладчиков.
Я думаю, что это невозможно в Java. Единственная функция, которая позволяет вам «отступить», — это использование «перехода к кадру», который возвращает вас к первой инструкции текущего кадра. По крайней мере, я не видел ни одного отладчика с такой функциональностью, но в сети не нашел, почему так...
Я знаю, что отладчик в Visual C позволяет изменить указатель. Я продолжу искать, может быть, по крайней мере, мы узнаем, почему это так, но, похоже, это какое-то ограничение дизайна.
Запрос функции, в котором говорится, что это невозможно
В https://bugs.eclipse.org/bugs/show_bug.cgi?id=287795 (кредиты Amitd) Дарин Райт говорит, что это ограничение базового отладчика Java:
В настоящее время это невозможно с помощью отладчика Java, поскольку собственный интерфейс отладки не предоставляет возможности произвольного перемещения/установки счетчика программ.
С/С++
Однако CDT поддерживает его (проверено на Neon, Ubuntu 14.04). Щелкните правой кнопкой мыши строку, к которой вы хотите перейти, и выберите один из следующих вариантов:
- «Перейти к строке»: перейти к строке и сломаться там
- «Возобновить со строки»: перейти к строке и продолжить выполнение оттуда
Это также служит дополнительным доказательством того, что существует основное ограничение Java, поскольку Java имеет тенденцию быть более многофункциональным в Eclipse, и эти пункты меню отсутствуют в Java рядом с «Выполнить в строку» (который не пропускает выполнение строк) .
Эта тестовая программа выводит 0, если вы переходите строку i = 1
:
#include <stdio.h>
int main(void) {
int i;
i = 0; /* Break here. */
i = 1;
printf("%d\n", i); /* Jump to here. */
}
«Запустить в строку», по-видимому, требует, чтобы программа работала и находилась в состоянии паузы для использования. Другой вариант — установить точку останова для этой строки при работе в режиме отладки.
- Дважды щелкните крайнюю левую вертикальную полосу на панели исходного кода в той же строке, чтобы добавить точку останова; или,
- Выберите строку и перейдите в «Выполнить»> «Переключить точку останова».
По крайней мере, это есть в Eclipse 3.3.2.