Як відступити назад у відладчику Eclipse?


129

Чи можливо зробити зворотне виконання у відладчику Eclipse? Поточний проект, над яким я працюю, потребує мінімум 5 секунд, щоб прочитати та ініціалізувати дані з файлу, перш ніж щось можна зробити. Якщо я переступаю за допомогою налагоджувача, мені доведеться припинити програму та перезапустити, і це потребує неабиякого часу.

Відповіді:


136

Для повторного введення поточного методу зверху ви можете скористатися командою " drop- Eclipse" для кадру . Але це не буде скасовувати будь-які зміни стану, які відбулися, тому може не працювати в залежності від методу, в якому ви перебуваєте.

Ще один класний інструмент, який насправді дозволяє вам відступити вперед і вперед - це всесвітній налагоджувач . Він працює за допомогою інструментальних класів під час завантаження в завантажувач, тому він може записувати все, що робить ваш код. Він може робити дуже класні речі, як-от відповідь "коли, де і чому цьому полі було призначено його поточне значення?". Користувацький інтерфейс досить незграбний, і він може важко обробляти великі бази коду, але в деяких випадках він може дійсно заощадити багато часу.

Оновлення : Chronon пропонує комерційний продукт, який описується як "відеореєстратор для Java", який, схоже, робить багато тих самих речей, що і ODB.


@Matt McHenry я намагався використовувати ODB1.5; з автономною програмою Java, але я не впевнений, як змусити її працювати? Чи є у вас будь-які ресурси, крім сайту ODB, що пояснюють кроки, щоб зробити його самостійним та за допомогою Eclipse?
Аюсман

@Ayusman: ні, вибачте, у мене немає нічого спільного з тим, що є на сайті ODB. Я не був би здивований, якщо це не працює з більш новими форматами файлів .class, серед іншого. :(
Метт Макенрі

Цікава відповідь!
KrishPrabakar

Здається, веб-сайт Omnscient Debugger був домінований.
Thorbjørn Ravn Andersen

45

Крім того, що було сказано в попередніх відповідях - тобто функція Eclipse drop to frame у вікні налагодження , яка перезапускає налагодження раніше у кадрі стека (але не повертає глобальні / статичні дані) та налагоджувач Omniscient , який трохи невідкладний еволюціонує - є кілька інструментів на основі Eclipse, які можна використовувати для "повернення" в час (запуску):

JIVE розширює налагоджувач Java Eclipse з можливістю запису програмних станів. Перспектива JIVE надає деякі корисні діаграми UML, які оновлюються під час роботи програми. Ці діаграми забезпечують огляд стану програми (об'єктна діаграма) та сліду стека (діаграма послідовностей). Ви можете запитати запам'ятоване трасування і крокувати назад і вперед у часі і бачити відповідні діаграми.

Дайвер записує лише виклики методу і насправді не записує програмні стани, такі як JIVE. Кожна подія виклику методу зберігається для подальшого пошуку та аналізу. Він розширює конфігурації Java Run та Debug, головним чином, щоб вказати фільтри. Сліди можна призупинити / відновити / відфільтрувати під час виконання. Після запису перспектива Diver може відображати його в інтерактивній діаграмі послідовностей.

JIVE та Diver - проекти з відкритим кодом, що випускаються з наукових досліджень. Станом на листопад 2012 року обидва проекти активні.

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

Усі ці плагіни є досить жадібними в ресурсах, тому краще мати хорошу технічну техніку та використовувати їх функцію фільтра. Визначальною вимогою для їх успішного запуску є розширення простору купи в eclipse.ini .

У моєму випадку я намагався використовувати JIVE та Diver для налагодження програми розбору XML, але завжди закінчувався заморожуванням затемнення через брак ресурсів. Дайвер може бути складним для запуску на Linux 64bit , він працює на ubuntu 32bit і, можливо, інших 32-бітових дистрибутивах, використовуючи ці поради . Diver працює у Windows, ще краще на Windows 64bit + 64bit JVM, інакше у 32-бітових вікнах ви будете обмежені максимальним простором купи 1,3-1,6Gb . JIVE чудово працює на моєму 64-бітному Linux і, здається, чудово працює на інших платформах.



12

Так , Eclipse CDT підтримує функцію історичної налагодження.

Відкрийте конфігурацію налагодження -> налагоджувач -> увімкнути зворотну налагодження при запуску .

Після чого ви можете натиснути shift+F5або зробити shift+F6крок назад, як, F5або F6для кроку вперед.


1
Чи існує ця опція у всіх версіях Eclipse? Мені загрожує, якщо я можу його знайти де завгодно.
EngineerBetter_DJ

1
Її функція GDB sourceware.org/gdb/wiki/ReverseDebug, яка підтримується в Eclipse цим bugs.eclipse.org/bugs/show_bug.cgi?id=258284 запитом. Я думаю, що відповідь "так" з 2009 року.
Сергій

Він доступний в CDT.
Сергій

Я розробник Java, тому я здогадуюсь, що CDT мені не принесе великої користі?
EngineerBetter_DJ

@Sergei Я роблю це під WIndows 7 SP1 зі старою версією Springsource. Щоб увімкнути зворотну налагодження, потрібно спочатку налагодити як-> Конфігурації налагодження-> Головне. Внизу сторінки розміщується процес запуску. На ньому буде сказано "Використання стандартного засобу створення запуску процесів", і буде гіперпосилання на "Вибрати інше ...". Клацніть це і переконайтесь, що прапорець "Використовувати налаштування конкретних конфігурацій" встановлений, потім виберіть "GDB (GSF) Створити запуск процесу" та натисніть кнопку Гаразд. "Використання GDB (GSF) Create Launcher Process" тепер відображатиметься внизу головної вкладки.
Семмі

5

Я упереджений, але Хронон робить саме те, що ви шукаєте.

Перехід до Frame точно не відступає, оскільки якщо метод щось змінив на купі, його не буде повернено.


1
Чи дозволяє вам Chronon робити це в режимі реального часу? Я розумію, що спочатку потрібно записати сеанс за допомогою хронону, а потім, можливо, ви зможете відступити на цьому сеансі. Хіба це не так добре, як перезапуск програми? А може, мені щось не вистачає ..
Раам

2
так, вам потрібно спочатку записати свою програму, а потім зможете налагоджувати її в будь-який час після запису. Він відрізняється від перезавантаження програми, оскільки вам не потрібно пройти всі кроки, щоб відтворити помилку. Все, що вам потрібно зробити - це записати помилку один раз, а потім ви можете переглянути її в будь-який час, коли хочете налагоджувати, використовуючи лише запис. Для відтворення запису вам не потрібна частина початкового середовища.
pdeva

Чи працює Chronon в докерському середовищі? Моєї екліси немає на місцевих ..
Чой

3

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


1

Питання не визначає мову затемнення, і багато відповідей передбачає 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). Якщо я змінюю і зберігаю код у межах функції в режимі налагодження, рядок виконання автоматично переміщується до верхньої частини поточної функції, і я можу продовжувати звідти. Не те саме, що вказувати рядок, але це щось.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.