AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein FreePascal Exception abfangen und Fortsetzen

Exception abfangen und Fortsetzen

Ein Thema von DelTurbo · begonnen am 22. Dez 2020 · letzter Beitrag vom 29. Dez 2020
Antwort Antwort
Rolf Frei

Registriert seit: 19. Jun 2006
658 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Exception abfangen und Forsetzen

  Alt 23. Dez 2020, 13:27
Nutzt du irgendwo Threads, die nicht durch TThread behandelt werden?

In der VCL und im TThread ist ein try-except um alles drumrum,
(die Exception im TThread wird aber standardmäßig nur abgefangen, aber nicht behandelt .... niemand reagiert drauf und loggt die oder zeugt sie an)

Wenn eine Exception bis zum System durchrauscht, dann wird der komplette Prozess umgegehend beendet.
Aber vermutlich sollte sich dann zumindestens in der Windows-Ereignisanzeige ein Eintrag finden lassen.
Du hst schon mitbekommen, dass das ein Linux Programm ist und nichts mit Windows zu tun hat?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.756 Beiträge
 
Delphi 12 Athens
 
#2

AW: Exception abfangen und Forsetzen

  Alt 23. Dez 2020, 14:26
Ups.

TThread arbeitet dort aber gleich
und FMX macht auch seine Try-Except drumrum. (betrifft also nicht nur VCL)



Hmmm, Linux hat doch auch ein paar Logs im System.
Streht da denn nicht dann auch was drin, wenn ein Programm hart abraucht?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.248 Beiträge
 
Delphi 2007 Architect
 
#3

AW: Exception abfangen und Forsetzen

  Alt 28. Dez 2020, 11:20
Hi,
erstmal sorry für die späte Antwort. Aber ich musste der "Regierung" versprechen das ich Weihnachten nicht an den PC gehe.
Nochmal zu meinem Problem. Nein, in den Logs steht nix.

Nun nochmal zu meiner eigentlichen frage: Kann ich irgendwie mitbekommen das eine exception in einer lib/dll aufgetreten ist? Wenn ja, wie?

Vielen dank nochmal im Voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.756 Beiträge
 
Delphi 12 Athens
 
#4

AW: Exception abfangen und Forsetzen

  Alt 28. Dez 2020, 13:06
Ich weiß nicht wie es in Linux mit Laufzeitpackages (BPL) aussieht.

In Windows hat ja jeder EXE/DLL seine eigene RTTI (außer wenn mit BPLs kompiliert wurde), womit beim Übergang von Exceptions die andere Seite nichts mit der Exception-Klasse anfangen kann.
Wenn in der Library/DLL eine Exception auttritt, diese Funktion von der EXE aus aufgerufen wurde, dann geht zwar die Exception in die EXE über, aber die Delphi-Exception und deren Message-Text ist drüben dann nicht (direkt) bekannt.

Von einer Exception in einem Thread, der z.B. ausschließlich innerhalb der Library/DLL arbeitet, davon bekommt die EXE natürlich nichts mit.

Sowas wie Eurekalog/MadExcept fügten einen Hook ein, welcher Exceptions abfängt.
k.A. ob sowas schon für Linux+Delphi existiert.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Exception abfangen und Forsetzen

  Alt 28. Dez 2020, 13:53
Im Trace sieht man, dass das Logout noch ein "Quit" hinschicken will.
Ist vielleicht hier eine Race Condition vorhanden, dass z.B. das SSL nicht mehr richtig geladen ist oder so?
Du hast ja was mit 40 Threads gearbeitet wird.

Die Fragen die mir in den Kopf springen:
Alles über eine Verbindung?
Jeder Thread eine eigene?
Wie wurde das SSL initialisiert bzw. wie wird das abgeräumt?
Ist das OpenSSL threadsafe?


___
Zu Try / Except gibt es auf Coding BOTT ein Video:

try / finally / except - Schutzblöcke in Delphi kurz erklärt
https://www.youtube.com/watch?v=mag5Qp17NM4
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.248 Beiträge
 
Delphi 2007 Architect
 
#6

AW: Exception abfangen und Forsetzen

  Alt 28. Dez 2020, 14:05
Hi,
Jeder Thread hat seinen eigenen SMTP den er beim Start des Threads im Thread erstellt. Im Fehlerfall wird der gelöscht und neu erstellt. Das ist aber nur zur Sicherheit und meines wissen noch nicht passiert.

OpenSSL wird beim Programm Start Initialisiert. OpenSSL ist Threadfest.

Nochmal kurz an @himitsu. Es handelt sich um FreePascal. Ich selber arbeite, wenn ich es brauche, mit CodeTyphon. Da ich auch Programme für ARM Prozessoren schreibe.

Meint ihr die Class TThread wäre besser und ich könnte dann nur den einen Thread beenden?
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Exception abfangen und Forsetzen

  Alt 28. Dez 2020, 14:23
Hmm, dann hab ich nur noch folgende Idee:


Das Quit wird an den SMTP Server übermittelt. Was ist wenn ein Quit#13#10 geschickt wird und "der" aktuell SMTP auf Linux läuft und dann die Verbindung nach dem #13 beendet, dass das "Broken Pipe" entsteht, weil das #10 noch durch will?


Du könntest also mal Loggen, bei welchen SMTP Server das entsteht.

Edit:
In der RFC steht CRLF

Code:
4.1.1.10. QUIT (QUIT)

   This command specifies that the receiver MUST send a "221 OK" reply,
   and then close the transmission channel.

   The receiver MUST NOT intentionally close the transmission channel
   until it receives and replies to a QUIT command (even if there was an
   error). The sender MUST NOT intentionally close the transmission
   channel until it sends a QUIT command, and it SHOULD wait until it
   receives the reply (even if there was an error response to a previous
   command). If the connection is closed prematurely due to violations
   of the above or system or network failure, the server MUST cancel any
   pending transaction, but not undo any previously completed
   transaction, and generally MUST act as if the command or transaction
   in progress had received a temporary error (i.e., a 4yz response).

   The QUIT command may be issued at any time. Any current uncompleted
   mail transaction will be aborted.

   Syntax:

      quit = "QUIT" CRLF

Evtl. das hier?
https://stackoverflow.com/questions/...pe-broken-pipe
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott

Geändert von generic (28. Dez 2020 um 14:28 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

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 15:57 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