Как сделать шаг назад в отладчике Eclipse? - PullRequest
124 голосов
/ 02 декабря 2010

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

Ответы [ 6 ]

132 голосов
/ 02 декабря 2010

Вы можете использовать команду Eclipse drop to frame для повторного ввода текущего метода сверху.Но он не будет развертывать любые изменения состояния, которые произошли, поэтому он может не работать в зависимости от типа используемого вами метода.

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

Обновление : Chronon предоставляет коммерческий продукт, который он описывает как «видеорегистратор для Java», который, похоже, выполняет те же функции, что и ODB.

44 голосов
/ 30 декабря 2010

Помимо того, что было упомянуто в предыдущих ответах - то есть функция Eclipse «перетащить в кадр» в представлении отладки , которая перезапускает отладку ранее в кадре стека (но не возвращает глобальные / статические данные) и Всезнающий отладчик , который немного сырой и не так сильно развивается - есть несколько инструментов на основе Eclipse, которые можно использовать для «возврата» во время (запуска):

JIVE расширяет отладчик Java Eclipse возможностью записи состояний программы.Перспектива JIVE предоставляет некоторые полезные UML-диаграммы, которые обновляются во время работы программы.Эти диаграммы предоставляют обзор состояния приложения (диаграмма объекта) и трассировки стека (диаграмма последовательности).Вы можете запросить запомненную трассировку и сделать шаг назад и вперед во времени и увидеть соответствующие диаграммы.

Diver записывает только вызовы методов и в действительности не записывает состояния программ, такие как JIVE.Каждое событие вызова метода сохраняется для последующего поиска и анализа.Он расширяет конфигурации Java Run и Debug, главным образом, для определения фильтров.Трассировка может быть приостановлена ​​/ возобновлена ​​/ отфильтрована во время выполнения.После записи перспектива Diver может отображать ее на интерактивной диаграмме последовательности.

JIVE и Diver - это проекты с открытым исходным кодом, разработанные в результате научных исследований.По состоянию на ноябрь 2012 года оба проекта являются активными.

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

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

В моем случае я пытался использовать JIVE и Diver для отладки программы синтаксического анализа XML, но всегдазакончилось тем, что заморозило затмение из-за нехватки ресурсов.Diver может быть сложно запустить на 64-битной Linux , он работает на 32-битной Ubuntu и, возможно, других 32-битных дистрибутивах, используя эти советы .Diver работает на Windows, еще лучше на Windows 64-битной + 64-битной JVM, в противном случае вы будете ограничены максимальным пространством кучи 1,3-1,6 ГБ на 32-битных Windows .JIVE отлично работает на моем linux 64bit и, кажется, отлично работает на других платформах.

12 голосов
/ 17 июня 2012

Да , Eclipse CDT поддерживает функцию исторического отладчика.

Открыть Настройка отладки -> Отладчик -> Включить обратную отладку при запуске .

Чем вы можете нажать shift+F5 или shift+F6 для шага назад, например F5 или F6 для шага вперед.

5 голосов
/ 07 июня 2011

Я предвзят, но Chronon делает именно то, что вы ищете.

Drop to Frame не делает точного шага назад, поскольку, если метод изменил что-либо в куче, он не будетвернулся.

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

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

1 голос
/ 27 ноября 2012

Вопрос не указывает язык Eclipse, и многие ответы предполагают Java.

При использовании C ++ и GCC с отладчиком GDB Eclipse имеет Run->Move to Line, который выполняет эту работу и функционирует подобно Visual Studio Set Next Statement .В этом случае Eclipse использует возможность, которая есть в GDB.

Если используется Java, я не знаю, как это сделать с Eclipse или Netbeans, хотя в других ответах были предложены плагины.Eclipse имеет команду «drop to frame», которая работает для Java в моей версии (Juno SR1).Если я изменяю и сохраняю код в функции в режиме отладки, строка выполнения автоматически перемещается в начало текущей функции, и я могу продолжить с нее.Не то же самое, что указание строки, но это что-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...