Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Debugger - Befehlzeile nicht ausführen (https://www.delphipraxis.net/189408-debugger-befehlzeile-nicht-ausfuehren.html)

Pfaffe 9. Jun 2016 14:12

Debugger - Befehlzeile nicht ausführen
 
Ist es möglich, während des debuggens eine Befehlszeile zu überspringen ohne das diese ausgeführt wird, also so als wäre sie bereits vor dem compilieren auskommentiert worden.

stahli 9. Jun 2016 14:45

AW: Debugger - Befehlzeile nicht ausführen
 
Nicht dass ich wüsste, aber wenn die Zeile nur eine einfache Änderung vornimmt (z.B. Inc(I)) könnte man I nach der Ausführung wieder auf den vorherigen Wert zurück setzen.

Wenn Du für Testzwecke die Zeile mal ausführen willst und mal nicht, könntest Du eine globale Variable anlegen
Delphi-Quellcode:
var gCallLine: Boolean = True;

die Zeile kapseln
Delphi-Quellcode:
if gCallLine then
begin
  Inc(I);
end;
und zur Debugtime gCallLine überschreiben.

Vielleicht taugt das als Notlösung.

Der schöne Günther 9. Jun 2016 14:52

AW: Debugger - Befehlzeile nicht ausführen
 
Dass man den Code-Teil anpassen kann wäre mir neu.
Absolute Hardcore-Profis können bestimmt den Stack lesen und entsprechend manipulieren, aber eingebaut habe ich noch nie etwas gesehen.

himitsu 9. Jun 2016 15:38

AW: Debugger - Befehlzeile nicht ausführen
 
Man kann natürlich in der CPU-Ansicht den EIP ändern und auf eine andere "Code"-Stelle setzen. :stupid: (Strg+N, siehe Kontextmenü)

Ich war mir fast sicher, daß sowas auch sich des Quellcodes ging.
Aber im Notfall einfach ein
Delphi-Quellcode:
if EineVariable then
und im Debugger kannst du ja den Varriableninhalt ändern.

Oder meinst du sowas wie
Delphi-Quellcode:
if not IsDebuggerPresent then
, was den Code nicht ausführt, wenn es im Debugger läuft ?
MSDN-Library durchsuchenIsDebuggerPresent

TiGü 9. Jun 2016 16:27

AW: Debugger - Befehlzeile nicht ausführen
 
Natürlich ist das möglich!
Und zwar seit irgendeiner Version von Delphi XE.

Du kannst während des Debuggens den kleinen blauen Pfeil, der die aktuelle Zeile anzeigt, mit dem Mauszeiger anfassen (linke Maustaste).
Dann kannst du den Pfeil per Drag'n'Drop auf eine Zeile, die ebenfalls blaue "Debugpunkte" hat, verschieben.
Die Programmausführung fährt dann an dieser Stelle fort.

So kannst du auch einzelne Zeilen oder ganze Abschnitte überspringen.

himitsu 9. Jun 2016 16:41

AW: Debugger - Befehlzeile nicht ausführen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ohh stimmt, also hier in XE(1).
Mal was Neues. :shock:

Im Kontextmenü gibt es was, auch wenn es hier irgendwie immer deaktiviert ist.

Der schöne Günther 9. Jun 2016 16:55

AW: Debugger - Befehlzeile nicht ausführen
 
Zitat:

Zitat von TiGü (Beitrag 1339843)
Natürlich ist das möglich!

Wahnsinn, das war mir vollkommen neu. Cool!

dummzeuch 9. Jun 2016 20:02

AW: Debugger - Befehlzeile nicht ausführen
 
Zitat:

Zitat von TiGü (Beitrag 1339843)
Und zwar seit irgendeiner Version von Delphi XE.

Du kannst während des Debuggens den kleinen blauen Pfeil, der die aktuelle Zeile anzeigt, mit dem Mauszeiger anfassen (linke Maustaste).
Dann kannst du den Pfeil per Drag'n'Drop auf eine Zeile, die ebenfalls blaue "Debugpunkte" hat, verschieben.
Die Programmausführung fährt dann an dieser Stelle fort.

Vorher ging das auch schon per Editor-Kontextmenu -> Debug -> Set Next Statement (seit Delphi 2006).

Und davor gab es im Kontextmenu des CPU-Windows die Set EIP Funktion. Dazu sollte man die Mixed Ansicht (also ASM + Sourcecode) einschalten, damit man weiss, wo eine Sourcecodezeile anfaengt..

TiGü 10. Jun 2016 08:45

AW: Debugger - Befehlzeile nicht ausführen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1339846)
Zitat:

Zitat von TiGü (Beitrag 1339843)
Natürlich ist das möglich!

Wahnsinn, das war mir vollkommen neu. Cool!

Mega geil, oder?
Habe ich auch erst letzten Herbst zufällig entdeckt.
Erleichtert das Leben enorm.

Sherlock 10. Jun 2016 10:14

AW: Debugger - Befehlzeile nicht ausführen
 
Und ich hab da immer ein
Delphi-Quellcode:
if DebugHook <> 0
reingefummelt...

Sherlock

jaenicke 10. Jun 2016 12:26

AW: Debugger - Befehlzeile nicht ausführen
 
Das ist in der Tat ein Feature, das nicht viele kennen. Ich habe die CPU-Ansicht standardmäßig eingeblendet beim Debuggen, da ist es am einfachsten so etwas zu benutzen.
Wenn man da allerdings einen Fehler macht, kann es auch passieren, dass man sich den Stack zerschießt. Vor allem, wenn man ein push oder pop so überspringt.

Was auch nicht viele benutzen ist die Möglichkeit mit einem Haltepunkt einen anderen zu aktivieren oder zu deaktivieren. Wenn ich eine Codestelle debuggen möchte, die oft verwendet wird, kann ich den Haltepunkt deaktivieren und erst durch einen Haltepunkt aktivieren, der vorher angesprungen wird. Dann noch einen weiteren hinter den Code, der den Haltepunkt wieder deaktiviert und ich kann immer debuggen, wenn ich es möchte, aber ansonsten wird der Haltepunkt ignoriert.
Die Haltepunkte zum umschalten sollten dafür natürlich auf "nicht anhalten" gestellt sein.

Aviator 10. Jun 2016 12:43

AW: Debugger - Befehlzeile nicht ausführen
 
Das mit dem Überspringen geht schon seit Delphi 2010. Ich hatte damals noch 2009 benutzt und mich geärgert, dass ich dieses Feature nicht nutzen kann.

noisy_master 10. Jun 2016 12:56

AW: Debugger - Befehlzeile nicht ausführen
 
Hallo zusammen,

ist nicht vielleicht das folgende gemeint?!?:

rechte Maustaste-> Fehlersuche->nächste Anweisung setzen


... das ging übrigens schon in D2006

Pfaffe 13. Jun 2016 16:13

AW: Debugger - Befehlzeile nicht ausführen
 
Ich kam jetzt erst dazu die Lösungsvorschläge nachzuvollziehen. Beides funktioniert "Pfeil per Drag'n'Drop verschieben" und "rechte Maustaste-> Fehlersuche->nächste Anweisung".
Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz