Fehlersuche mit Benutzung v. Programmabbrüchen
Hallo,
es ist mitunter mühsam nach Fehlern zu debuggen. Wie kann ich Programmabbrüche nach Fehlern benutzen, um effizient nach Fehlerstellen zu suchen. Bislang hatte ich nach Setzen von Breakpoints solange mit F7 und F8 herumgeklickert bis der Abbruch kam. Das kann sehr mühsam werden. Gibt es die Möglichkeit, nach F9 ein Programm bis zum Fehlerabbruch laufen zu lassen, dann 1-3 Schritte zurück zu gehen, und sich dann Variablenwerte anzusehen ? Vielen Dank für einen effizienten Tip EB |
AW: Fehlersuche mit Benutzung v. Programmabbrüchen
Es gibt afaik moderne Debugger*, die das beherrschen, der in Delphi eingebaute gehört aber nicht dazu (zumindest habe ich noch nichts davon gehört, so etwas würde doch beworben).
Du müsstest du fraglichen Werte selbst loggen. *EDIT: Reverse Debugging scheint das Stichwort zu sein. |
AW: Fehlersuche mit Benutzung v. Programmabbrüchen
Sehr nützlich kann auch ein Stacktrace sein.
Das sieht z.B. so aus:
Code:
Um einen Stacktrace zu bekommen muss man mit TD32-Debug-Info linken
(000456CA){demo.exe } [004466CA] Controls.TWinControl.WndProc + $1D2
(0001F0DC){demo.exe } [004200DC] Classes.TReader.ReadDate + $8 (0001ABE0){demo.exe } [0041BBE0] Classes.TThreadList.UnlockList + $4 (0002C1EC){demo.exe } [0042D1EC] Graphics.FreeMemoryContexts + $98 (000452CC){demo.exe } [004462CC] Controls.TWinControl.MainWndProc + $2C (000452E1){demo.exe } [004462E1] Controls.TWinControl.MainWndProc + $41 (0005894C){demo.exe } [0045994C] Forms.StdWndProc + $14 (000452CC){demo.exe } [004462CC] Controls.TWinControl.MainWndProc + $2C (0005894C){demo.exe } [0045994C] Forms.StdWndProc + $14 (0006284A){demo.exe } [0046384A] Forms.TApplication.StopHintTimer + $12 (00061D27){demo.exe } [00462D27] Forms.TApplication.ProcessMessage + $83 (00061D5E){demo.exe } [00462D5E] Forms.TApplication.HandleMessage + $A (00061F69){demo.exe } [00462F69] Forms.TApplication.Run + $81 (006F2347){demo.exe } [00AF3347] pss.initialization (Line 771, "C:\Delphi\Test\demo.dpr" + 56) + $7 und Bibliotheken verwenden (z.B. JEDI Code Library), die den Stacktrace erzeugen können. |
AW: Fehlersuche mit Benutzung v. Programmabbrüchen
Wenn es reproduzierbare Fehler sind kann man an bestimmten Stellen Ausgaben in eine Datei bzw Konsole vornehmen und damit die Position des Fehlers einengen. Bzw kann man wohl mit den Adressen in der Fehlermeldung diese Stelle finden.
|
AW: Fehlersuche mit Benutzung v. Programmabbrüchen
Zitat:
|
AW: Fehlersuche mit Benutzung v. Programmabbrüchen
Zitat:
Rückwärts den Ablauf abspielen geht aber nicht, das würde wohl auch etwas schwierig werden. Zur Fehlersuche hilft es auch insbesondere an oft durchlaufenen Stellen einfach den Haltepunkt auf "nicht anhalten" zu stellen und stattdessen nur Daten zu loggen (z.B. Variablenwerte auswerten oder einen Stacktrace bei jedem Durchlauf anzeigen). Danach kann man dann Haltepunktbedingungen oder die Aktivierung von Haltepunktgruppen darauf abstimmen und so relativ schnell zur Problemstelle kurz direkt vor dem Auftreten des Problems kommen. |
AW: Fehlersuche mit Benutzung v. Programmabbrüchen
Was hat das denn mit dem Thema zu tun? :?
|
AW: Fehlersuche mit Benutzung v. Programmabbrüchen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 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