![]() |
Anweisung um in den Debug-Mode zu kommen
Hallo,
gibt es einen Befehl,mit dem ich in den Debug-Modus schalten kann. z.B. if i <> 0 then DEBUGSTART. Danke Karl |
AW: Anweisung um in den Debug-Mode zu kommen
Debugging findet in aller Regel unabhängig vom geschriebenen Code statt. Wenn du an einer bestimmten Stelle debuggen willst, so setze einen Breakpoint und/oder steppe mit Einzelschritt (F7) bzw. F8 durch. Man kann auch bedingte Breakpoints setzen, also solche, die erst greifen, wenn z.B. eine Variable einen bestimmten Wert hat.
Grüße Dalai |
AW: Anweisung um in den Debug-Mode zu kommen
Mir ist überhaupt nicht klar was du möchtest. Willst du mit deinem Code erreichen, dass der laufende Debugger deine Anwendung anhält, so als wärst du auf einen Haltepunkt gelaufen? Das geht (beispielsweise) mit
![]() |
AW: Anweisung um in den Debug-Mode zu kommen
Dennoch kann es unter bestimmten Umständen sinnvoll sein, codeseitig den Debugger aufzurufen. Bedingte Breakpoints können den Code ganz schän abbremsen, so dass es sehr lange dauern kann, bis eine Bedingung erfüllt ist und die Ausführung dann auch stoppt, obwohl es im normalen Betrieb sehr schnell geht.
In solchen Fällen kann es sinnvoll sein, den Debugger-Aufruf vorübergehend (!) direkt in den Code einzubauen. Ich kenne die Lösung allerdings nur für Win32. Da geht das so:
Delphi-Quellcode:
Wie das bei anderen Plattformen funktioniert, weiß ich allerdings nicht. Aber vielleicht reicht dir Win32 ja für den Anfang.
if i<>0 then
asm int 3 end; |
AW: Anweisung um in den Debug-Mode zu kommen
Zitat:
Delphi-Quellcode:
Dann ist es nicht anz so schlimm, wenn man vergisst, diesen Code wieder zu entfernen.
if i<>0 then
asm nop // <<== Breakpoint hier setzen end; Zitat:
|
AW: Anweisung um in den Debug-Mode zu kommen
Ich kenne das Ganze aus der SAp-Umgebung. Dort kann man in der Programmsprache die
Anweisung Break-Point. setzen und bei der Ausführung hält das Programm an der entsprechenden Stelle an und verzweigt in den Debug-Modus. ich wollte nur wissen, ob es etwas Vergleichbares in delphi gibt. Die Möglichkeiten des Debugging sind mir ansonsten vertraut. Auch die Möglichkeiten von Variablenwerte abhängige Haltepunkt zu deinieren. Trotzdem danke für all die Antworten. Ich wollte mir eine einfache Möglichkeit schaffen bei bestimmten Werten, welche ich an einer beliebigen Stelle definiere, nicht jedesmal einen Haltepunkt setzen zu müssen, sondern das mit einer allgemeinen Prozedur abzufackeln. procedure haltehier(variable,haltewert : string); begin if haltewert = '' then exit; if variable = haltewert. break-point. endif. end; Das hätte mir die Möglichkeit geschaffen,a unterschiedliche Stellen im Programm haltehier(variable, 'Haltewert'); einzubauen. Das hätte ich dann für späteres debugging einfach im Code gelassen und die Wette auf '' gesetzt. Für jene, die das für eine blöde Idee halten, okay, ist es vielleicht, aber ich hatte schon blödere..... Danke Karl |
AW: Anweisung um in den Debug-Mode zu kommen
Hallo Karl,
du hast ja von Thomas, mir und dem schönen Günther Vorschläge bekommen, wie du genau das machen kannst. Oder war daran noch etwas unklar? Ich frage nach, weil du so im Konjunktiv schreibst. |
AW: Anweisung um in den Debug-Mode zu kommen
Zitat:
Alternativ kannst du aber auch einen Haltepunkt setzen und dem eine ![]() |
AW: Anweisung um in den Debug-Mode zu kommen
Hi Karl
Du kannst auch an gewissen Stellen die Werte verschiedener Variablen in zB. eine Liste speichern:
Delphi-Quellcode:
Erzeugen der Liste. Die muss dann bei FormDestroy wieder zerstört werden.
procedure TFormxxx.FormCreate(Sender: TObject);
begin FReportList := TStringlist.Create(); end;
Delphi-Quellcode:
Füllen der Liste während des Programmlaufs
procedure TOpenFileFrame.FileSearcher1MatchFound(Sender: TObject;
const Path: string; const FileInfo: TSearchRec); var Complettpath, J: String; begin if Assigned(FCurrentNode) then begin Complettpath := IncludeTrailingPathDelimiter(Path) + FileInfo.Name; // Complettpath := DeleteDrivesName(Complettpath); AddNewNode(FCurrentNode, FileInfo.Name, Complettpath,TSearchRecAnalyzer.IsDirectory(FileInfo)); FReportList.Add(' TOpenDlg.FileSearcher1MatchFound'); FReportList.Add(' -- Complettpath := : '+ Complettpath); FReportList.Add(' -- J := ' + J); FReportList.Add(' -- FFileType := ' + FFileType); FReportList.Add(' -- FPathlist.Count := : '+ IntToStr(FPathlist.Count)); end; end; Erzeugt einn Filestream und speichert die Liste darin. TFileStream.Create schlägt fehl, wenn die Datei schon existiert. So kann ich jeden Testlauf in einer eigenen Liste/Datei festhalten:
Delphi-Quellcode:
procedure TMainForm.WriteReportFile;
var S, DateTimeStr, DS: string; ReportStream: TFileStream; begin DS := DateTimeToStr(Now); DateTimeStr := StringReplace(DS, ':', '-', [rfReplaceAll]); S := ExtractFilePath(Application.ExeName) + '\' + 'CodeReport ' +DateTimeStr+'.txt'; Reportstream := TFileStream.Create(S, fmCreate); try FReportList.insert(0,DateTimeToStr(Now)); FReportlist.Insert(1,'----------------'); FReportlist.SaveToStream(ReportStream); finally Reportstream.Free; end; end; Mit ReplaceStr werden alle Doppelpunkte aus Now entfernt und durch Bindestriche ersetzt. Doppelpunkte sind in Dateinamen zumindest bei Delphi/Windows nicht erlaubt. Gruss Delbor |
AW: Anweisung um in den Debug-Mode zu kommen
Zitat:
Vielen Dank für die Antworten und Vorschläge. Karl |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 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 by Thomas Breitkreuz