Hoe stap je terug in Eclipse debugger?

Is het mogelijk om omgekeerde uitvoering uit te voeren in Eclipse debugger? Het huidige project waaraan ik werk, vereist minimaal 5 seconden om gegevens uit een bestand te lezen en te initialiseren voordat er iets kan worden gedaan. Als ik de foutopsporing overschrijd, moet ik het programma beëindigen en opnieuw opstarten, en dit kost behoorlijk wat tijd.


Antwoord 1, autoriteit 100%

U kunt de verplaats naar frameom de huidige methode opnieuw in te voeren vanaf de bovenkant. Maar het zal geen statuswijzigingen uitrollen die hebben plaatsgevonden, dus het kan zijn dat het niet werkt, afhankelijk van het soort methode dat u gebruikt.

Een andere echt coole tool waarmee je echt een stap terug en vooruit in de tijd kunt doen, is de Omniscient Debugger. Het werkt door klassen te instrumenteren terwijl ze in de classloader worden geladen, zodat het alles kan opnemen wat je code doet. Het kan heel coole dingen doen, zoals het antwoord “wanneer, waar en waarom heeft dit veld de huidige waarde gekregen?”. De gebruikersinterface is nogal onhandig en het kan moeilijk zijn om grote codebases te verwerken, maar in sommige gevallen kan het echt veel tijd besparen.

Update: Chrononlevert een commercieel product dat het beschrijft als een “DVR voor Java”, die veel van dezelfde dingen lijkt te doen als de ODB.


Antwoord 2, autoriteit 34%

Voorbij wat in eerdere antwoorden is genoemd – bijv. Eclipse’s drop-to-frame-functie in de debug-weergave, die het debuggen eerder in het stapelframe opnieuw start (maar zet geen globale/statische gegevens terug) en Alwetende debugger, die is een beetje rauw en niet zozeer in ontwikkeling – er zijn een paar op Eclipse gebaseerde tools die kunnen worden gebruikt om “terug” te gaan in (run)time:

JIVE breidt Eclipse Java-debugger uit met de mogelijkheid om de programmastatussen vast te leggen. Het JIVE-perspectief biedt enkele handige UML-diagrammen die worden bijgewerkt terwijl het programma draait. Deze diagrammen geven een overzicht van de status van de applicatie (objectdiagram) en van de stacktracering (sequentiediagram). U kunt het opgeslagen spoor opvragen en terug en vooruit in de tijd stappen en de bijbehorende diagrammen bekijken.

Diver neemt alleen methode-aanroepen op en niet echt programmastatussen zoals JIVE. Elke methodeaanroepgebeurtenis wordt opgeslagen om later op te halen en te analyseren. Het breidt de Java Run- en Debug-configuraties voornamelijk uit om filters te specificeren. Traceren kan tijdens runtime worden onderbroken/hervat/gefilterd. Eenmaal opgenomen, kan het Diver-perspectief het weergeven in een interactief sequentiediagram.

JIVE en Diver zijn open source-projecten die voortkomen uit academisch onderzoek. Vanaf november 2012 zijn beide projecten actief.

Chronon is een commercieel product, maar ze hebben gratis licenties voor studenten en open source-projecten. Van wat er op hun website wordt beweerd, is het waarschijnlijk de meest uitgebreide recorder, omdat het in staat is om de opgenomen geschiedenis opnieuw af te spelen, heen en weer te stappen, waardoor zoals ze zeggen tijdreizendebuggen mogelijk is. Eclipse is ook niet nodig voor opname.

Al deze plug-ins zijn nogal gulzig in bronnen, dus het is het beste om een ​​goede spec-machine te hebben en hun filterfunctie te gebruiken. Een duidelijke vereiste om ze met succes uit te voeren is om de heap space in eclipse uit te breiden .ini.

In mijn geval heb ik geprobeerd om JIVE en Diver te gebruiken om een ​​XML-parseerprogramma te debuggen, maar eindigde altijd met het bevriezen van eclips vanwege een gebrek aan middelen. Diver kan lastig zijn om op linux 64bit te draaien, het werkt op ubuntu 32bit en mogelijk andere 32bit distributies met behulp van deze tips. Diver werkt op Windows, beter nog op een Windows 64bit + 64bit JVM anders ben je beperkt tot een maximale heap-ruimte van 1,3-1.6Gb op 32-bits Windows. JIVE werkt prima op mijn linux 64bit en lijkt prima te werken op andere platforms.


Antwoord 3, autoriteit 9%

Ja, Eclipse CDT ondersteunt de historische debugger-functie.

Open Debug-configuratie-> Debugger-> Omgekeerde foutopsporing inschakelen
bij opstarten
.

Vervolgens kun je op shift+F5of shift+F6drukken om een ​​stap terug te doen, zoals F5of F6voor stap naar voren.


Antwoord 4, autoriteit 4%

Ik ben bevooroordeeld, maar Chronondoet precies wat je zoekt.

Drop to Frame is niet echt een stap terug, want als de methode iets op de heap heeft veranderd, wordt het niet teruggedraaid.


Antwoord 5, autoriteit 2%

Ik was ook op zoek naar deze functie in Eclipse. Ik weet dat de visuele studio dat kan. Eigenlijk kun je de huidige lijnmarkering slepen en overal in de code neerzetten. Ik weet niet zeker of de wijzigingen in variabelen ongedaan kunnen worden gemaakt. Maar het is nog steeds erg handig en bespaart veel tijd. Ik heb hier heel lang op gewacht in eclipse.


Antwoord 6

De vraag specificeert geen Eclipse-taal, en veel van de antwoorden gaan uit van Java.

Als u C++ en GCC gebruikt met de GDB-debugger, heeft Eclipse Run->Move to Linedie het werk doet en functioneert als de Visual Studio Volgende instructie instellen. In dit geval gebruikt Eclipse de mogelijkheid die in GDB zit.

Als ik Java gebruik, weet ik geen manier om dit te doen met Eclipse of Netbeans, hoewel andere antwoorden plug-ins hebben voorgesteld. Eclipse heeft de opdracht “drop to frame” die werkt voor Java in mijn versie (Juno SR1). Als ik code aanpas en opsla binnen een functie in debug-modus, gaat de uitvoeringsregel automatisch naar de bovenkant van de huidige functie en kan ik vanaf daar verder gaan. Niet hetzelfde als het specificeren van de regel, maar het is iets.

Other episodes