Der Stacktrace nach/bei der
Exception sagt dir nichts?
Und eventuell noch ein Self.Name/ClassName oder dergleichen angucken.
Warum werden überhaupt soviele Forms immer automatisch erzeugt?
Werden die denn wirklich alle ständig benötigt?
Man kann natürlich auch die eigenen Forms ableiten, im Vorfahren den Destructor überschreiben und mit einem Try-Except befüllen, welches einem zumindestens die Form nennt, bei welcher es knallt.
Delphi-Quellcode:
type
TForm =
class(Forms.TForm)
destructor Destroy;
override;
end;
destructor TForm.Destroy;
var
S:
string;
begin
try
S := ClassName + '
' +
Name + '
: ';
// wird ja theoretisch im inherited freigegeben
inherited;
except
on E:
Exception do
ShowMessage(S + E.
Message);
end;
end;
Muß ja nichtmal eine "wirkliche" Ableitung sein, sondern einfach das vor die TMyForm-Deklaration, bzw. in eine eigene
Unit und die als Allerletztes ins Uses vor die eigenen Forms-
Man darf natürlich keinen Breakpoint in DestroyComponents setzen,
Kann man schon.
Notfalls deaktiviert man den Haltepunktpunkt einfach und lässt ihn von einem passendem Trigger aktivieren.
Oder man gibt ihm eine Bedingung, damit er nur bei TForms anhält.
Ein Haltepunkt nach Application.Run; (wenn nichts mehr da ist, dann auf das
end.
danach) und dann manuell durchsteppen (F7/F8/F10).
Dabei natürlich vorher vergessen die
RTL/
VCL-DebugDCUs abzuschalten, welche ja nur standardmäßig immer an sind.