![]() |
Re: Debuggen ohne Haltepunkte wie
Zitat:
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:
Nach i := 1; wird die nächste Zeile (s := IntToStr(i);) angesprungen. (gleiches Verhalten bei F8 und F7)
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 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:
So kann man auch die RTL und die VCL von Delphi debuggen. (Vorausgesetzt man hat den Quellcode im $(DELPHI)/Source Verzeichnis)
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; 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 |
Re: Debuggen ohne Haltepunkte wie
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz