AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fehlersuche mit Benutzung v. Programmabbrüchen

Ein Thema von EccoBravo · begonnen am 17. Sep 2010 · letzter Beitrag vom 9. Feb 2015
Antwort Antwort
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#1

Fehlersuche mit Benutzung v. Programmabbrüchen

  Alt 17. Sep 2010, 15:19
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
Wahre Aussage :=
Katzen, die bellen sind keine Kaninchen.

Der Kreisverkehr ist eine spezielle Form der Einbahnstraße
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Fehlersuche mit Benutzung v. Programmabbrüchen

  Alt 17. Sep 2010, 15:31
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.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (17. Sep 2010 um 15:36 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: Fehlersuche mit Benutzung v. Programmabbrüchen

  Alt 17. Sep 2010, 18:03
Sehr nützlich kann auch ein Stacktrace sein.
Das sieht z.B. so aus:
Code:
(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
Um einen Stacktrace zu bekommen muss man mit TD32-Debug-Info linken
und Bibliotheken verwenden (z.B. JEDI Code Library), die den Stacktrace erzeugen können.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Fehlersuche mit Benutzung v. Programmabbrüchen

  Alt 17. Sep 2010, 18:24
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.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#5

AW: Fehlersuche mit Benutzung v. Programmabbrüchen

  Alt 17. Mai 2012, 10:38
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.
Hmmmmmm, aaaaber wie sieht das denn mit dem Debuginfo Format aus. Soweit ich weiß, verwendet Borland/Codegear/Embacadero das OMF Format. Während die GNU Tools das stabs oder dwarf Format verwenden. Welchen Workaround gibt es da für ein mit Delphi kompiliertes Programm?
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.287 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Fehlersuche mit Benutzung v. Programmabbrüchen

  Alt 17. Mai 2012, 10:59
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).
Man kann in Delphi ja problemlos den Stack nach oben wandern (Doppelklick in der Stackanzeige) und sieht dann natürlich alle verfügbaren lokalen Variablen an den verschiedenen Stationen. Meistens findet man so zumindest eine Stelle, an der man mit einem Breakpoint einklinken kann, zudem werden die Breakpoints auch im Stack markiert und sind dort umschaltbar.

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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.287 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Fehlersuche mit Benutzung v. Programmabbrüchen

  Alt 9. Feb 2015, 09:37
Was hat das denn mit dem Thema zu tun?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Fehlersuche mit Benutzung v. Programmabbrüchen

  Alt 9. Feb 2015, 09:41
Was hat das denn mit dem Thema zu tun?
Scheint der Bruder von SPAMela Anderson zu sein
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:02 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