AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?

Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?

Ein Thema von Der schöne Günther · begonnen am 30. Aug 2013 · letzter Beitrag vom 27. Sep 2016
Antwort Antwort
Der schöne Günther

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

Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?

  Alt 30. Aug 2013, 14:17
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 TThread sondern von TJclDebugThread = class(TThread) ab, habe ich im Fall einer Exception den gesamten Stack Trace in Form einer 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 JclDebugThread ableiten.

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 StackTrace -Eigenschaft ja immer nur einen leeren String
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.823 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?

  Alt 30. Aug 2013, 17:42
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:
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;
Die Funktion madStackTrace.StackTrace erzeugt dabei den StackTrace. (Der Code oben ist leicht modifiziert, nicht 100% wie in meinem Framework, nur zur Illustration).
Michael Justin
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?

  Alt 30. Aug 2013, 18:01
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 except -Block sagen

Delphi-Quellcode:
JclLastExceptStackList().AddToStrings(
   stringList,
   False,
   True,
   True
);

for stringLine in stringList do
   loggeIrgendwohin(stringLine);
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.

Geändert von Der schöne Günther (30. Aug 2013 um 18:04 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?

  Alt 9. Sep 2013, 20:11
*stößchen*
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Kann man mit JclDebug an Exceptions in Indy-Threads herankommen?

  Alt 27. Sep 2016, 11:09
Besser spät als nie, für alle nachfolgenden Generationen:

Konkrete Lösung: JclHookExcept.JclAddExceptNotifier(meineMethode) .

Anhaltspunkt ganz allgemein ohne Jcl: System.ExceptProc lässt sich ersetzen (Zitat "Zeigt auf die Exception-Behandlungsroutine auf der untersten Ebene.")
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf