Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#19

AW: Stackoverflow finden - wenn es denn einer ist

  Alt 7. Jan 2016, 16:12
Hast Du in dem Programm die Komponente TApplicationEvents drin (unter Delphi 7 gibt's die, bei neueren weiß ich nicht).

Zitat von Delphi7Hilfe:
Beschreibung
Mit TApplicationEvents können die Ereignisse des globalen Anwendungsobjekts Application abgefangen werden. Wenn ein TApplicationEvents-Objekt in ein Formular eingefügt wird, leitet das Anwendungsobjekt alle Ereignisse an das TApplicationEvents-Objekt weiter. Somit ist jedes Ereignis des TApplicationEvents-Objekts mit dem gleichnamigen Ereignis des Objekts Application identisch.

Jedes Formular in einer Anwendung kann ein eigenes TApplicationEvents-Objekt besitzen. Die Anwendungsereignisse treten für alle TApplicationEvents-Objekte im Projekt auf. Die Reihenfolge, in der die einzelnen TApplicationEvents-Objekte Ereignisse empfangen, kann mit der Methode Activate gesteuert werden. Wenn andere TApplicationEvents am Empfang eines bestimmten Ereignisses gehindert werden sollen, verwenden Sie die Methode CancelDispatch.
Die Komponente hat auch ein Ereignis onException, dort solltest Du dann auch die nicht von Dir abgefangenen Exceptions "abbekommen".

Um "nicht auffindbare Fehler" zu finden, nutze ich die Jedis. Dort gibt es unter \install\JVCLInstall\Debug\ einen Dialog, der die Jedi-Fehlerbehandlung kapselt.

ExceptionDlg.pas und ExceptionDlg.dfm.

(Leider nicht ganz fehlerfrei, es fehlt die Konstante AnsiCrLf = #13#10; Und die Routine
Delphi-Quellcode:
begin
  if ExceptionShowing then
    Application.ShowException(Thread.SyncException)
  else
  begin
    ExceptionShowing := True;
    try
      ShowException(Thread.SyncException, Thread);
    finally
      ExceptionShowing := False;
    end;
  end;
end;
muss geändert werden in:
Delphi-Quellcode:
class procedure TExceptionDialog.ExceptionThreadHandler(Thread: TJclDebugThread);
begin
  if ExceptionShowing then
    Application.ShowException(Exception(Thread.SyncException))
  else
  begin
    ExceptionShowing := True;
    try
      ShowException(Exception(Thread.SyncException), Thread);
    finally
      ExceptionShowing := False;
    end;
  end;
end;
Ins Programm einbinden reicht, mit ausfühlicher MAP-Datei kompilieren und diese mit ausliefern.

Ein kleines Progrämmelchen, das die Jedi-Fehlerbehandlung enthält hängt an.

Der Dialog lässt sich sicherlich so anpassen, dass das Fehlerprotokoll in eine Datei geschrieben wird, die man Dir dann ggfls. per Mail schicken könnte.

Geändert von nahpets (21. Nov 2017 um 17:41 Uhr)
  Mit Zitat antworten Zitat