![]() |
Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?
Auch wenn mir die Jedis komischerweise die Möglichkeit, Zeilen mittels STRG+# auszukommentieren, nehmen, habe ich sie nun eingebunden und bin begeistert:
Leite ich meinen Thread nicht von
Delphi-Quellcode:
sondern von
TThread
Delphi-Quellcode:
ab, habe ich im Fall einer Exception den gesamten Stack Trace in Form einer
TJclDebugThread = class(TThread)
Delphi-Quellcode:
. :-)
TStringList
Jetzt werde ich gierig und würde gerne auch an den Stacktrace einer onExecute-Methode eines Indy-Servers (TIdTCPServer) herankommen. Ich kann ja jetzt nicht in die Indy-Sourcen gehen und deren Threads nun alle von
Delphi-Quellcode:
ableiten.
JclDebugThread
Was tue ich? Aufgeben? Kann ich irgendwie über den Threadpool eines Indyservers drübergehen und die Threads alle manuell irgendwie umbiegen? Vielleicht gibt es auch einen ganz anderen Weg ohne Jedis? Die Standard Delphi-Klasse EException gibt mir in ihrer
Delphi-Quellcode:
-Eigenschaft ja immer nur einen leeren String :-(
StackTrace
|
AW: Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?
Kann man JclDebug auch einfach die Exception übergeben um den Stacktrace zu erhalten? Ich mache das in meinem Indy-basierten Web Framework, allerdings mit madExcept.
Man muss nur im OnExecute Handler schreiben:
Delphi-Quellcode:
Die Funktion madStackTrace.StackTrace erzeugt dabei den StackTrace. (Der Code oben ist leicht modifiziert, nicht 100% wie in meinem Framework, nur zur Illustration).
try
... werte Request aus, erzeuge die Response except on E: Exception do begin Response.ContentText := '<!DOCTYPE html>' + #10 + '<html>' + #10 + ' <head>' + #10 + ' <title>500 Internal Error</title>' + #10 + ' </head>' + #10 + ' <body>' + #10 + ' <h1>' + E.ClassName + '</h1>' + #10 + ' <h2>Exception message: ' + E.Message + '</h2>' + #10 + ' <hr />' + #10 + ' <h2>Stack trace:</h2>' + #10 + ' <pre>' + #10 + string(madStackTrace.StackTrace) + #10 + ' </pre>' + #10 + ' </body>' + #10 + '</html>'; // nicht vergessen! raise; end; end; |
AW: Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?
Ich kenne keine JclDebug-Methode, in welche man eine Exception reinstecken kann. Das muss allerdings nichts heißen, denn entweder bin ich zu dumm, oder es existiert sowieso praktisch Null Dokumentation.
Ich kann zwar in meinem
Delphi-Quellcode:
-Block sagen
except
Delphi-Quellcode:
aber da kommt nur Quatsch heraus: Ich werfe in meinem Indy onExecute-Thread manuell eine Exception. Da bin ich mir sicher, dass weder MSXML noch TeeChart Pro damit etwas zu tun hat.
JclLastExceptStackList().AddToStrings(
stringList, False, True, True ); for stringLine in stringList do loggeIrgendwohin(stringLine); |
AW: Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?
*stößchen*
|
AW: Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?
Besser spät als nie, für alle nachfolgenden Generationen:
Konkrete Lösung:
Delphi-Quellcode:
.
JclHookExcept.JclAddExceptNotifier(meineMethode)
Anhaltspunkt ganz allgemein ohne Jcl:
Delphi-Quellcode:
lässt sich ersetzen (Zitat "Zeigt auf die Exception-Behandlungsroutine auf der untersten Ebene.")
System.ExceptProc
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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