Как отступить в отладчике Eclipse?

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

Ответ 1

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

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

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

Ответ 2

Помимо того, что было упомянуто в более ранних ответах - например, функция Eclipse для кадрирования в кадре debug view, который перезапускает отладку ранее в фрейме стека (но не возвращает глобальные/статические данные) и Omniscient debugger, который немного сырых и не так много развивается - есть несколько инструментов на основе Eclipse, которые можно использовать для "возврата" в (run) time:

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

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

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

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

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

В моем случае я попытался использовать JIVE и Diver для отладки программы синтаксического анализа XML, но всегда заканчивал замораживание затмения из-за нехватки ресурсов. Diver может быть сложно запускать на Linux 64bit, он работает на 32-битных и, возможно, 32-битных дистрибутивах ubuntu, используя эти советы. Diver работает в Windows, еще лучше на Windows 64bit + 64bit JVM, иначе вы будете ограничены максимальное пространство кучи 1.3-1.6Gb на 32-битные окна. JIVE отлично работает на моем 64-битном Linux и, похоже, отлично работает на других платформах.

Ответ 3

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

Открыть Конфигурация отладки Отладчик Включить обратную отладку при запуске.

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Если вы используете С++ и GCC с отладчиком GDB, Eclipse имеет Run->Move to Line, который выполняет задание и функции, такие как Visual Studio Установить следующий отчет, В этом случае Eclipse использует возможности, которые находятся в GDB.

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