Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Keine Exceptions (https://www.delphipraxis.net/217036-keine-exceptions.html)

bcvs 11. Apr 2025 10:57

Keine Exceptions
 
Hallo,

wie kann es eigentlich sein, dass in einem Projekt keine Exceptions mehr angezeigt werden?

Im Debugger sehe ich die Exceptions noch, aber im Programm selbst nicht. Gibt es da irgenwo eine globale Einstellung für so was?

Delphi 10.2 in dem Fall

peterbelow 11. Apr 2025 11:09

AW: Keine Exceptions
 
Siehst Du keine Exception-Meldungen zur Laufzeit, d. h. Exe gestartet ohne Debugger oder außerhalb der IDE? Da fällt mir nur eine Möglichkeit ein: TApplication (und TApplicationEvents) haben einen Event OnException. Wenn Du dafür einen Handler angelegt hast, der die Exception nicht anzeigt, würde das die Symptome erklären.

bcvs 11. Apr 2025 11:50

AW: Keine Exceptions
 
Zitat:

Zitat von peterbelow (Beitrag 1548013)
Siehst Du keine Exception-Meldungen zur Laufzeit, d. h. Exe gestartet ohne Debugger oder außerhalb der IDE?

Genau, so ist es. OnException habe ich nicht.

Ich vermute, es hängt mit dem MadExcept zusammen. Habe gerade noch etwas ausprobiert.

Hintergrundinfo:
Ich zwei Projekte, die sich das selbe Mainform und auch die meisten Units teilen und nur über ifdefs unterschiedlich kompiliert werden.

Die Projekte wurde gerade auf einen neuen Rechner mit neu installiertem Delphi portiert. Auf dem alten Rechner war in den Projekten das MadExcept aktiviert. Auf dem neuen Rechner war zunächst noch kein MadExcept installiert. Das habe ich gerade nachgeholt.

Jetzt habe ich folgende Situation, was die Anzeige von Meldungen im Exception-Fall angeht (Ich hoffe, das ist einigermaßen verständlich)

Code:
Alter Rechner
  MadExcept aktiviert
    Projekt A: MadExept-Meldungen
    Projekt B: MadExept-Meldungen

  MadExcept deaktiviert
    Projekt A: nichts
    Projekt B: nichts

Neuer Rechner
  MadExcept aktiviert
    Projekt A: MadExept-Meldungen
    Projekt B: nichts

  MadExcept deaktiviert
    Projekt A: nichts
    Projekt B: nichts

Was micht wundert ist, dass auch auch schon auf dem alten Rechner bei deaktiviertem MadExcept keine normalen Exceptions kommen. Das war mir vorher nicht aufgefallen. Und auf dem neuen Rechner kommt bei Projekt B überhapt nichts, auch nicht mit aktivem MadExcept.

Kann sich da jemand einen Reim drauf machen?

peterbelow 12. Apr 2025 11:12

AW: Keine Exceptions
 
Mit MadExcept habe ich selbst nie gearbeitet. Aber Du bist Dir sicher, daß die fraglichen Exceptions nicht in deinem eigenen Kode in einem try except-Block abgefangen und verschluckt werden und MadExcept sie nur wie der IDE Debugger auf einer tieferen Ebene detektiert und anzeigt bzw. ins Log schreibt?

Kannst Du das Problem in einem Testprojekt nachstellen?

Versuch auch mal, das DPROJ-File umzubenennen und das Projekt über das DPR-File zu öffnen. Ein neu erzeugtes DPROJ-File hat halt sicher keine historischen Artefakte drin...

TurboMagic 12. Apr 2025 16:55

AW: Keine Exceptions
 
Hallo,

MadExcept kümmert sich eigentlich nur um Exceptions um die sich der Entwickler
noch nicht selber gekümmert hat.

jaenicke 12. Apr 2025 19:16

AW: Keine Exceptions
 
Kannst du das denn nicht debuggen? Je nachdem, wo die Exception ausgelöst wird, gibt es natürlich unterschiedliche Stellen, an denen diese behandelt wird. Das kannst du aber im funktionierenden Projekt prüfen.

Beispiel:
Wenn die Exception in einem Buttonklick ausgelöst wird, landest du im except in TWinControl.MainWndProc, wo dann Application.HandleException aufgerufen wird (das dann die Messagebox anzeigt).

bcvs 14. Apr 2025 10:45

AW: Keine Exceptions
 
Jetzt habe ich es gefunden: Es gab doch ein Application.OnException. Das hatte ich anscheinend verdrängt/vergessen. Den Code dafür hatte ich aus einem Forum des Datenbankherstellers (ElevateDB).

Delphi-Quellcode:
if Assigned(E) then begin
  if (E is EDatabaseError) and (E is EEDBError) then
    begin
      if EEDBError(E).ErrorCode=EDB_Error_SessionNotFound then
        begin
          // Exception in Logdatei Protokollieren
        end;
    end;
end;
Es sollte eigentlich so sein, dass hier nur das EDB_Error_SessionNotFound behandelt wird und alle anderen Exceptions unangetastet bleiben. Die werden aber auch verschluckt, was ich jetzt weiß.

Ich habe jetzt mal ein Application.ShowException(E) eingebaut. Dann funktioniert es wie gewohnt.

himitsu 14. Apr 2025 13:23

AW: Keine Exceptions
 
AND?

Und im
Delphi-Quellcode:
on E: irgendwas do
ist E immer assigned.


Delphi-Quellcode:
except  
  on E: EEDBError do
    if E.ErrorCode = EDB_Error_SessionNotFound then
      ...
    else
      ...;
  on E: Exception do
    ...;
end;

Uwe Raabe 14. Apr 2025 14:22

AW: Keine Exceptions
 
Es ist zwar nicht in einem except-Block, sondern im
Delphi-Quellcode:
Application.OnException
, aber selbst da ist die übergebene Exception immer eine gültige Instanz.

dummzeuch 14. Apr 2025 14:52

AW: Keine Exceptions
 
Zitat:

ist die übergebene Exception immer eine gültige Instanz.
Hm, da bin ich mir nicht so sicher. ich meine mich zu erinnern, mal Ewigkeiten nach einem Bug gesucht zu haben, wo das Exception-Objekt NIL war. Wenn ich mich jetzt nur noch an die Details erinnern könnte.

Edit: Gefunden. Nur gut, dass ich über so was immer gleich blogge.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.
Seite 1 von 2  1 2      

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