Angenommen, Du hast in Deinem Programm irgendwo eine Ereignisroutiene dieser Art:
Delphi-Quellcode:
procedure Tform1.btnProgrammbeenden(Sender: TObject);
begin
stb.SimpleText := 'Das Programm wird beendet ...';
Application.ProcessMessages;
Close;
end;
Dann einen Breakpoint auf das Close setzen und dann mit dem Debugger schrittweise (F7) bis zum Fehler weitersteppen.
Das CPU-Fenster vorher aufmachen und dort schauen, was bei jedem Schritt so gemacht wird. Daraus solltest Du dann eventuell Rückschlüsse auf die Fehlerursache ziehen können.
Oder das Programm mit ausführlicher MAP-Datei erstellen und dort die Fehleradresse aus der Fehlermeldung suchen. Eventuell findest Du dort dann brauchbare Informationen.
Nutzt Du zufällig die JVCL?
Wenn ja, papp Dir die Komponente TJvDebugHandler auf's Formular, gibt dort einen Namen für die Logdatei ein und erstelle Dein Programm mit ausfühlicher MAP-Datei.
Im Fehlerfalle sollte dann sowas in der Art in der LOG-Datei stehen:
Code:
22.02.2017 18:02:43
Exception EDivByZero occured in TForm1.FormCreate at 29 in file Unit1.pas
Message: Division durch Null
Call stack:
[581E1048] Unit1.TForm1.FormCreate (Line 29, "Unit1.pas")
[581BE2C1] Forms.TCustomForm.DoCreate (Line 2648, "Forms.pas")
[581BDFA1] Forms.TCustomForm.AfterConstruction (Line 2575, "Forms.pas")
[581C5661] Forms.TApplication.CreateForm (Line 6947, "Forms.pas")
[581E1413] Project1.Project1 (Line 11, "E:\Delphi\Project1.dpr")
Analog dazu solltest Du dann bei Deinem Programm einen Hinweis auf die fehlerverursachende Stelle bekommen.