Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Programm beendet sich selbständig, aber ohne Fehler (https://www.delphipraxis.net/44762-programm-beendet-sich-selbstaendig-aber-ohne-fehler.html)

Christian Seehase 24. Apr 2005 12:54


Programm beendet sich selbständig, aber ohne Fehler
 
Moin Zusammen,

folgendes geschieht bei meinem Programm im Moment:
  1. Programm wird gestartet (F9)
  2. Zu verarbeitende Datei wird geladen (STRG-O, Standard-Öffnen-Dialog, TAction)
  3. Verarbeitung wird gestartet (STRG-T, TAction)
    (hierbei werden ein paar Objekte erzeugt)
  4. Verarbeitung läuft
  5. Verarbeitung beendet
  6. ShowMessage soll angezeigt werden
    (wird ignoriert)
  7. Ergebnis soll gespeichert werden (Standard-Speichern-Dialog)
    (Dialog wird meist aufgerufen)
  8. Objekte werden freigegeben (try/finally-Block)
  9. Programm beendet sich selbständig

Setze ich auf ShowMessage einen Breakpoint, so läuft das Programm auch auf diesen auf.
Bei anschliessendem F8 wird die Meldung allerdings nicht angezeigt, sondern gleich auf die Folgezeile gewechselt, in der der Speicher-Dialog aufgerufen wird.
Ohne Breakpoint wird die Zeile ignoriert.
Der Speicher-Dialog wird, unabhängig vom vorher gesetzten Breakpoint, meistens aufgerufen (aber auch nicht immer).
Im Einzelschritt kann man sehen, dass die Objekte auch wieder freigegeben werden, unabhängig davon, ob der Speicher-Dialog aufgerufen wurde oder nicht.
Anschliessend beendet sich das Programm einfach.
(nein, es steht keine Close o.Ä. am Ende ;-))

Weder MemCheck, noch MemProof zeigen irgendwelche Fehler an.

Das Problem tritt auf bei Compilierung mit D5Pro dt. und D7Pro en. (jeweils mit Update) auf.
Es werden keine Sonderkomponenten benützt, bei D5 habe ich TStringList um die Unterscheidung von Gross-/Kleinschreibung erweitert.

Optimierung ist ausgeschaltet, Stackframes ein, und alle sonstigen Debugger-Informationen und -Prüfungen sind eingeschaltet (auch TD32 für den Linker)
Das Problem tritt allerdings unabhängig von diesen Einstellungen auf.

Der Fehler muss leider mit Sicherheit am Programm liegen, den wenn ich einen bestimmten (auch recht umfangreichen) Teil weglasse tritt das Problem nicht auf.

Hat irgendjemand eine Idee, auf was ich hier mein Augenmerk setzen sollte um den Fehler zu finden?

Vielen Dank im Voraus.

SirThornberry 24. Apr 2005 12:59

Re: Programm beendet sich selbständig, aber ohne Fehler
 
Deine Beschreibung deutet wirklich darauf hinn das du irgendwo über den speicher hinaus schreibst. Daher eventuell auch der nicht gezeigte Message-Dialog. Ich denke ohne Source können wir da wenig weiterhelfen.

Bernhard Geyer 24. Apr 2005 16:19

Re: Programm beendet sich selbständig, aber ohne Fehler
 
Zitat:

Zitat von Christian Seehase
[*]Programm beendet sich selbständig[/list]

Ich würde auf einen Stack-Overflow tippen. Hier kommt auch Delphi teilweise nicht dazu dies als Exception mitzubekommen. Erhöhe mal den Stack-Frame um einen sehr hohen Wert. Falls das "beendet sich selbständig" länger dauert ist die Wahrscheinlichkeit einer unendlichen Rekursion sehr hoch.

Christian Seehase 24. Apr 2005 20:20

Re: Programm beendet sich selbständig, aber ohne Fehler
 
Moin Zusammen,

erst einmal vielen Dank für die Antworten.

@Bernhard:
Sorry, das hatte ich vergessen zu erwähnen (weil ich auch vergessen hatte, dass ich es getan hatte):
Ich hatte den Stack schon um den Faktor 16 vergrössert.
Ausserdem war das Programm, vor dem unerwarteten Ende, komplett und ansonsten einwandfrei, durchgelaufen.


Des Rätsels Lösung habe ich aber gefunden, und es ist viel einfacher aber höchst peinlich:

Um zu sehen, ob das Programm noch läuft, und an welcher Stelle es sich befindet lasse ich diese in der Statusbar anzeigen.
Damit die Anzeige auch funktioniert, war diese Zeile gefolgt von einem Application.ProcessMessages.

...

Bis auf einmal ....

Da war es Application.Terminate
:oops: :oops: :oops: :oops: :oops:
:wall: :wall: :wall: :wall: :wall: :wall: :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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