Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Exception wird nicht gefangen (https://www.delphipraxis.net/183493-exception-wird-nicht-gefangen.html)

Dalai 14. Jan 2015 14:04

Exception wird nicht gefangen
 
Hallo ihr :)

ich hätt da gern mal wieder ein Problem. Folgende Situation: Ich habe ein Pugin für Total Commander geschrieben, das bei jemand anders den kompletten Total Commander mit ins Nirvana reißt, ohne dass irgendein Exception-Handling anspringen würde, weder das meiner DLL noch das von TC noch das des Betriebssystems. Es kommt also noch nicht einmal die übliche Meldung "Programm XY funktioniert nicht mehr".

Nun habe ich ein wenig "Debugging-Code" (OutputDebugString) in mein Plugin eingebaut und denjenigen gebeten, den Total Commander mit SimpleProgramDebugger auszuführen, um zu sehen, wo das Problem entsteht. Aus den damit gesammelten Daten lässt sich erkennen, dass eine Exception 0xc0000005 auftritt, also eine Access Violation. Fakt ist aber, dass diese Exception definitiv innerhalb eines try-except-Blocks auftritt (bzw. wahrscheinlich sogar mehrerer, wenn ich den des TC mitzähle). Dieser Block soll eigentlich noch mit OutputDebugString die Message der Exception ausgeben - tut er aber nicht.

Fragen: Gibt es Programme, die irgendwie im Exception-Handling von Anwendungen rumpfuschen können? Virenscanner, Sandboxen oder ähnliches? Gibt es andere Möglichkeiten, wie es sein kann, dass die Exception überhaupt nicht gefangen wird?

Ach, bevor jemand meint, das Problem liege an meinem Plugin: Nein, auch ein anderes ähnlich geartetes Plugin produziert exakt das gleiche Problem.

MfG Dalai

NicoDE 14. Jan 2015 15:13

AW: Exception wird nicht gefangen
 
Zitat:

Zitat von Dalai (Beitrag 1286524)
Gibt es andere Möglichkeiten, wie es sein kann, dass die Exception überhaupt nicht gefangen wird?

Ja, indem jemand einen VEH-Handler registriert (und darin zum Beispiel auf Synchronisationsobjekte zugreift oder Speicher anfordert, wovon laut MSDN abgeraten wird - oder einfach die Exception unterdrückt).

Dalai 14. Jan 2015 15:57

AW: Exception wird nicht gefangen
 
Mmh, und wie bekomme ich (bzw. derjenige mit dem crashenden TC) heraus, ob das passiert und wenn ja welche Applikation das tut?

MfG Dalai

NicoDE 14. Jan 2015 16:06

AW: Exception wird nicht gefangen
 
Zitat:

Zitat von Dalai (Beitrag 1286527)
Mmh, und wie bekomme ich (bzw. derjenige mit dem crashenden TC) heraus, ob das passiert und wenn ja welche Applikation das tut?

Keine Ahnung, soweit ich mich erinnere, gibt es keinen offiziellen Weg die Liste der registrierten VEH-Handler zu bekommen.
Zum Testen würde ich direkt vorher zwei Handler registrieren, einen als ersten und den anderen als letzten, dann eine Exception auslösen und "nachsehen" (ich würde vorher eine Log-Datei erzeugen und in den Handlern nur noch per Handle reinschreiben, damit es möglichst wenig Probleme gibt) ob beide aufgerufen wurden. Wenn nur der erste aufgerufen wird, dann funkt ein anderer VEH-Handler dazwischen... und möglicherweise ist der (noch) registrierte Handler in einer DLL, die bereits entladen wurde...

Dalai 16. Jan 2015 18:17

AW: Exception wird nicht gefangen
 
Das würde aber auch nur ermitteln, ob das der Auslöser ist. Man müsste weiter untersuchen, wo genau der Störenfried steckt. Daher bat ich den "Problemhaber" darum, mal die Autostarts zu durchforsten und ggf. den abgesicherten Modus zu probieren und inzwischen kann ich vermelden: Der Auslöser oder gar die Ursache wurde gefunden, indem ein bestimmtes Programm aus dem Autostart genommen wurde: Sony VaioCare. Ob es die Software selbst oder dessen Dienst war (beim Lesen der Konfiguration genau dieses Dienstes kam es zur Exception), ist mir nicht bekannt.

Dankeschön für die Unterstützung, Nico! :)

MfG Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz