Как установить текущую строку выполнения в отладчике eclipse java?

Я хочу принудительно перевести текущую строку выполнения в определенную строку в той же функции, возможно, пропуская промежуточные строки. Все мои отладчики старой школы имели эту функцию, но я не могу найти ее в eclipse. Есть ли способ сделать это без изменения кода?


person stu    schedule 10.10.2008    source источник
comment
Ищем функцию, аналогичную инструкции set next в Visual Studio, но для java/eclipse: msdn .microsoft.com/en-us/library/09yze4a9.aspx   -  person jm.    schedule 26.04.2011
comment
есть ошибка (или может быть) запрос функции для этого в ошибках Eclipse .org/bugs/show_bug.cgi?id=287795   -  person Amitd    schedule 26.10.2012
comment
Как указывает +PhiLho, если линия, которую вы хотите выполнить, находится впереди, во что бы то ни стало бегите к линии. Однако, если вы уже прошли линию, вы можете пропустить кадр, чтобы перейти к началу вызова функции. Затем вы бежите к линии, как и раньше.   -  person Robino    schedule 18.01.2016


Ответы (5)


Первые два ответа, похоже, не соответствуют теме, если только я не понимаю вопроса.

Насколько я понимаю, функция, которую я искал сам, заключается в том, что вы хотите пропустить несколько строк (при пошаговом выполнении кода) и установить программный счетчик (для использования словаря ассемблера) на заданную строку. Было бы интересно пропустить дорогостоящее создание объектов, увидеть некоторые ситуации с ошибками и т. д. Раньше я делал это в Visual Studio (код C или C++).

Я не нашел этого ни в Eclipse, ни в NetBean. Это может быть ограничение JVM или применение какой-то политики...

Команда Выполнить до строки, конечно же, выполняет все строки между текущей позицией выполнения и назначенной.

person PhiLho    schedule 10.10.2008
comment
Для тех, кто все еще ищет ответ, это ограничение JVM. Об этом сообщалось здесь и здесь, оба раза немедленно игнорируются. - person Stelios Adamantidis; 16.01.2020

Я тоже давно искал эту фичу, а "Бежать в линию" - это не одно и то же.

Это вполне может быть ограничением JVM. Java не реализует goto, хотя в нем есть операторы jump, такие как break и continue. Однако они находятся на уровне блоков. Если это ограничение JVM, я предполагаю, что это, скорее всего, связано с архитектурой безопасности. Строгий контроль над счетчиком программ утомляет злоумышленников, таких как вирусы, и, к сожалению, отладчиков.

person Chris Noe    schedule 14.10.2008
comment
да, это то, что говорила команда Eclipse.. я связал ссылку на затмение, показывающую разговор.. - person Amitd; 26.10.2012

Я думаю, что это невозможно в Java. Единственная функция, которая позволяет вам «отступить», — это использование «перехода к кадру», который возвращает вас к первой инструкции текущего кадра. По крайней мере, я не видел ни одного отладчика с такой функциональностью, но в сети не нашел, почему так...

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

person Mario Ortegón    schedule 13.10.2008

Запрос функции, в котором говорится, что это невозможно

В 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. */
}
person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 09.03.2017

«Запустить в строку», по-видимому, требует, чтобы программа работала и находилась в состоянии паузы для использования. Другой вариант — установить точку останова для этой строки при работе в режиме отладки.

  1. Дважды щелкните крайнюю левую вертикальную полосу на панели исходного кода в той же строке, чтобы добавить точку останова; или,
  2. Выберите строку и перейдите в «Выполнить»> «Переключить точку останова».

По крайней мере, это есть в Eclipse 3.3.2.

person jruel    schedule 10.10.2008
comment
-1 Run to line не имеет ничего общего с изменением выполнения программы. - person Peter Oehlert; 11.12.2011