Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

Re: Debuggen ohne Haltepunkte wie

  Alt 2. Dez 2004, 11:22
Zitat von jim_raynor:
Hast du vielleicht an den Compileroptionen rumgespielt? Da gabs doch eine Option Debug-DCUs.
Die Option "Mit Debug DCUs" hat aber eine andere Wirkung.

Delphi 7 Onlinehilfe
Mit Debug-DCUs
Die Debug-Versionen der CLX werden in die Anwendung gelinkt. Die DCU-Dateien enthalten Debugging-Informationen und sind mit Stack-Rahmen compiliert. Ist diese Option aktiviert, fügt der Compiler automatisch den Debug-DCU-Pfad (Registerkarte Allgemein von Tools/Debugger-Optionen) am Anfang des Suchpfades auf der Registerkarte Verzeichnisse/Bedingungen des Dialogfensters Projektoptionen ein.

Das ist so aber nicht ganz richtig.

Es funktioniert natürlich nicht nur mit clx sondern auch mit vcl!!!

Und wozu braucht man das ???

Ganz einfach:
Normalerweise wird nur der eigene Code debuggt, manchmal ist es aber nützlich auch in die vcl selbst zu debuggen. Ein Beispiel mit ausgeschalteter "mit Debug-DCUs":
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  s: string;
begin
  i := 1; // <- hier Breakpoint setzen und dann F7 oder F8 drücken
  s := IntToStr(i);
  Caption := s;
  i := 2;
  Caption := IntToStr(i);
end;
Nach i := 1; wird die nächste Zeile (s := IntToStr(i);) angesprungen. (gleiches Verhalten bei F8 und F7)
Nach s := IntToStr(i); wird die nächte Zeile (Caption := s;) angesprungen. (gleiches Verhalten bei F8 und F7)
...
Das ist das normale Debuggen.
Die Tasten F8 (Gesamte Routine) F7 (gesamte Anweisung) oder Shift+F7 (nächste Quelltextzeile) machen hier keinen Unterschied.

Wenn aber die Option "mit Debug DCUs" angeschaltet ist, ist das Verhalten etwas anders:

Verhalten bei F8:
Nach i := 1; wird die nächste Zeile (s := IntToStr(i);) angesprungen.
Nach s := IntToStr(i); wird die nächte Zeile (Caption := s;) angesprungen.

Verhalten bei F7:
Nach i := 1; wird die nächste Zeile (s := IntToStr(i);) angesprungen.
Nach s := IntToStr(i); wird in die Funktion IntToStr gesprungen.
Delphi-Quellcode:
function IntToStr(Value: Integer): string;
// FmtStr(Result, '%d', [Value]);
asm
        PUSH ESI // <- hier wird hingesprungen !!!
        MOV ESI, ESP
        SUB ESP, 16
        XOR ECX, ECX // base: 0 for signed decimal
        PUSH EDX // result ptr
        XOR EDX, EDX // zero filled field width: 0 for no leading zeros
        CALL CvtInt
        MOV EDX, ESI
        POP EAX // result ptr
        CALL System.@LStrFromPCharLen
        ADD ESP, 16
        POP ESI
end;
So kann man auch die RTL und die VCL von Delphi debuggen. (Vorausgesetzt man hat den Quellcode im $(DELPHI)/Source Verzeichnis)
Bei der Enterprise und Architect ist der quellcode dabei, bei der Proffessional Version weiß ich es nicht. Bei der Personal ist er nicht dabei!

Ich hoffe das hilft Euch beim Debuggen :-)

Ist übrigens sehr lehrreich durch die VCL zu debuggen und zu schauen wie hat das denn Bortland gemacht.

have fun
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat