rückwärts durch ein Programm



  • Hallo

    Ich weiß nicht genau, ob diese Frage schon einmal gestellt wurden ist, aber ich würde gerne wissen, ob es Debugger gibt mit denen man auch Schritte rückgängig nachen kann.

    chrische



  • Also ich weiß, dass man mit dem Compiler vom MS-Visual eine Zeile Code während des Debuggens ändern kann und dann per Knopfdruck ist es dann so, als hätte der Compiler die Zeile so durchlaufen, wie sie jetzt da steht.



  • Hallo

    Ich meinte das in etwa so: Mir passiert es beim debuggen oft, dass man sich durch das Programm hangelt und zack hat man das Programmm schon gecrasht. Dann wäre es doch nett, den letzten Schritt einfach wieder rückgängig zu machen und sich den kritischen Code noch einmal genau anschauen. Ich muss jetzt immer wieder von vorne anfangen und mich wieder bis zum Fehler quälen.

    chrische



  • Möglichkeit a) setze deinen Breakpoint an eine Stelle kurz vor dem Crash (und die Bedingung für den Breakpoint entsprechend, wenn der Code öfter durchlaufen wird)
    Möglichkeit b) (evt. auch notwendig für a)) beim Debugger von VS kann man auch zurückgehen, dadurch wird der Code nicht neu ausgeführt, aber du kannst dir alle Variablenwerte zu diesem Zeitpunkt anschauen, sollten die meisten Debugger können


  • Administrator

    Zudem gibt es ja auch noch den CallStack, bei dem du genau schauen kannst, was wann und wo aufgerufen wurde. So kannst du dann nach einem Crash auch sehr einfach einen Breakpoint hinsetzen.
    Grüssli



  • chrische5 schrieb:

    Ich weiß nicht genau, ob diese Frage schon einmal gestellt wurden ist, aber ich würde gerne wissen, ob es Debugger gibt mit denen man auch Schritte rückgängig nachen kann.

    Nunja, vermutlich nicht. Du müsstest eine Undo Funktion haben, die jeden Schritt überwacht und speichert. Das wäre wohl etwas zu aufwändig.



  • Der Debugger aus dem Visual Studio C++ 6 konnte das.
    Die Funktion hieß in etwa "Ausfühung von Cursor fortsetzen".
    Ich konnte sogar in eine vollkommen andere Funktion springen und dann weitermachen.



  • Du verwechselst hier irgendwas. Den IP frei zu setzen und Schritte rückgängig zu machen, sind 2 verschiedene Dinge.



  • Das kann auch der Debugger von VS2005 noch, aber hierbei wird tatsächlich nur der aktuelle Instruction Pointer verschoben, will heissen die Befehle werden nicht rückgängig gemacht, sondern nochmal ausgeführt.

    Wenn das natürlich den gleichen Effekt hat (hups, in der Formel für x ist ein Fehler, also lasse ich x einfach nochmal mit der korrekten Formel neu berechnen), dann ists eh wurscht.

    Der GDB kennt übrigens die Kommandos "jump LINESPEC" sowie "jump *ADDRESS" und (auf den meisten Plattformen) "set $pc = ADDRESS", mit denen sich genau das erreichen lässt (allerdings ohne den Code on-the-fly zu ändern).


Anmelden zum Antworten