AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Debuggen ohne Haltepunkte wie

Ein Thema von Tau · begonnen am 1. Dez 2004 · letzter Beitrag vom 2. Dez 2004
Antwort Antwort
Seite 2 von 2     12   
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
PRehders

Registriert seit: 31. Okt 2003
Ort: Hamburg
42 Beiträge
 
#12

Re: Debuggen ohne Haltepunkte wie

  Alt 2. Dez 2004, 11:41
Hallo zusammen,

ich hatte dieses Verhalten bei meinem D5 auch schon einmal, und es hatte (letztendlich) damit zu tun, dass ich mit Copy&Paste aus einer anderen Unit Code reingebastelt hatte.

Danach waren die sichtbaren Codezeilen und die Breakpoints gegeneinander verschoben und ich konnte es nicht anders korrigieren, als die eingefügten Zeilen wieder zu entfernen (eigentlich hatte ich nur eine Leerzeile entfernt und gesehen, dass sich Breakpoints und zugehöriger Code wieder "annäherten"; danach habe ich dann alles neue wieder rausgeschmissen und manuell eingefügt).
Da ich damals etwas unter Druck stand, habe ich das nicht weiter verfolgt bzw. reproduzierbar gemacht.

Kann es sich bei Dir auch um eine solche Verschiebung handeln? Hast Du evtl. größere Codeteile rumgeschoben, als Breakpoints gesetzt waren? Deine Schilderung erinnert mich sehr an mein damaliges Rumgestochere.

Ich nehme das aber mal als Anlass, das alte Projekt hervorzukramen und zu versuchen, das zu reproduzieren...

Viel Glück noch.

Peter
Peter Rehders
Man sollte niemanden ernst nehmen, der sich ernst nimmt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 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