AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Exception-Logging für ungefangene Exceptions aus DLLs
Thema durchsuchen
Ansicht
Themen-Optionen

Exception-Logging für ungefangene Exceptions aus DLLs

Ein Thema von Der schöne Günther · begonnen am 7. Aug 2015 · letzter Beitrag vom 10. Aug 2015
 
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Exception-Logging für ungefangene Exceptions aus DLLs

  Alt 7. Aug 2015, 17:51
Ein altes Delphi-Projekt schluckt viele Exceptions oder lässt sie auf die VCL durchbubbeln. Es soll nun so erweitert werden, dass diese Exceptions mit Callstack in eine Textdatei gelogged werden sollen.

Bis hierhin noch einfach. Jetzt das Problem: Das Projekt benutzt viele DLLs die ebenfalls in Delphi erstellt wurden. Es ist nicht garantiert dass alle von den DLLs exportierten Methoden keine Exceptions werfen. Die Aufruf-Direktive ist durchgehend stdcall .

Meine Frage: Ich kann für Exceptions aus der Anwendung ja einfach die Variable Exception.GetExceptionStackInfoProc auf eine Prozedur setzen die mir den Stacktrace ausliest (z.B. mit der JCL). Bei einer Exception direkt aus einer DLL wird das nie aufgerufen. Warum nicht? Was kann ich tun?

Ich habe keine Hoffnung, an den Stack aus der DLL zu kommen. Aber wenigstens die Stelle aus der Hauptanwendung werde ich doch wissen können?

Ich bin ganz ehrlich, mir fehlt das Lowlevel-Wissen, was da intern passiert. Ohne wirklich zu verstehen was da vor sich geht probierte ich mal mit der Aufruf-Direktive safecall . Hier wird Exception.GetExceptionStackInfoProc wieder ganz normal aufgerufen, aber Delphi scheint das ganze irgendwie komisch zu wrappen und wirft am Schluss lieber eine dumme OleException welche die eigentliche Exception nicht mehr beinhaltet.

Auf die Idee kam ich nur da Wikipedia spricht:
Zitat:
The safecall calling convention is the same as the stdcall calling convention, except that exceptions are passed back to the caller in EAX as a HResult (instead of in FS:[0]), [...]
Kann ich Hoffnung haben, in meinem Hauptprogramm einfach überall stdcall durch safecall zu ersetzen? Mann, sind das wilde Gedanken.

i-have-no-idea-what-im-doing-dog.jpg
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.
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