AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein FreePascal Exception abfangen und Fortsetzen
Thema durchsuchen
Ansicht
Themen-Optionen

Exception abfangen und Fortsetzen

Ein Thema von DelTurbo · begonnen am 22. Dez 2020 · letzter Beitrag vom 29. Dez 2020
Antwort Antwort
Seite 1 von 2  1 2      
DelTurbo

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

Exception abfangen und Fortsetzen

  Alt 22. Dez 2020, 14:52
Hi,
ich habe ein RIESEN Problem. Eventuell bin ich nur zu doof zum suchen, bzw. ich suche nach den falschen Sachen. Ich schreibe einen Newsletter-Versender der unter Debian läuft. Es laufen ca. 40 Threads um die Mails per Synapse zu versenden. Es wird ein Bodyhash und DKIM berechnet. Dabei wird ab und zu eine Exception im OpenSSL ausgelöst. Ich kann diesen Fehler leider nicht reproduzieren. Mal läuft das Programm 4 Tage durch, dann kommt der Fehler schon nach 2 Stunden. Ich hänge die Exception die mir gdb anzeigt hier dran. Vielleicht hat ja jemand eine Idee.

Nun dachte ich, egal, eine Mail weniger die rausgeht und möchte die Exception abfangen. Das mache ich mit einem Override von HandleException. Nun zur eigentlichen Frage. Gibt es eine Möglichkeit das er danach weiter macht, und nicht das Programm "intern" neu Startet?

Hier die Exception die kommt:
Code:
Thread 5 "newsletter" received signal SIGPIPE, Broken pipe.
[Switching to Thread 0x7ffff6dc8700 (LWP 2906)]
__libc_write (nbytes=35, buf=0x7fffe00f4c43, fd=5) at ../sysdeps/unix/sysv/linux/write.c:26
26             return SYSCALL_CANCEL (write, fd, buf, nbytes);
(gdb) bt
#0  __libc_write (nbytes=35, buf=0x7fffe00f4c43, fd=5) at ../sysdeps/unix/sysv/linux/write.c:26
#1  __libc_write (fd=5, buf=0x7fffe00f4c43, nbytes=35) at ../sysdeps/unix/sysv/linux/write.c:24
#2  0x00007ffff7b21ad5 in ?? () from /lib/x86_64-linux-gnu/libcrypto.so
#3  0x00007ffff7b1cd5a in ?? () from /lib/x86_64-linux-gnu/libcrypto.so
#4  0x00007ffff7b1bdb3 in ?? () from /lib/x86_64-linux-gnu/libcrypto.so
#5  0x00007ffff7b1c253 in BIO_write () from /lib/x86_64-linux-gnu/libcrypto.so
#6  0x00007ffff79f0877 in ?? () from /lib/x86_64-linux-gnu/libssl.so
#7  0x00007ffff79f1b71 in ?? () from /lib/x86_64-linux-gnu/libssl.so
#8  0x00007ffff7a03f82 in ?? () from /lib/x86_64-linux-gnu/libssl.so
#9  0x00007ffff7a040b3 in SSL_write () from /lib/x86_64-linux-gnu/libssl.so
#10 0x0000000000656478 in SSLWRITE (SSL=0x7fffe002f370, BUF=0x686960, NUM=6) at ../HelperUnits/Synapse/ssl_openssl_lib.pas:1328
#11 0x00000000004c8d07 in SENDBUFFER (this=0x7fffe00557d8, BUFFER=0x686960, LEN=6) at ../HelperUnits/Synapse/ssl_openssl.pas:637
#12 0x000000000062d538 in SENDBUFFER (this=0x7fffe00a3f38, BUFFER=0x686960, LENGTH=6) at ../HelperUnits/Synapse/blcksock.pas:4066
#13 0x0000000000626968 in SENDSTRING (this=0x7fffe00a3f38, DATA=0x686960 "QUIT\r\n") at ../HelperUnits/Synapse/blcksock.pas:2113
#14 0x00000000004bf57c in LOGOUT (this=0x7fffe0061338) at ../HelperUnits/Synapse/smtpsend.pas:486
#15 0x000000000049567d in SENDTHREAD (VARPTR=0xa1b9d8) at ../uSendMailThrdRuleVx.pas:651
#16 0x0000000000428750 in CTHREADS_$$_THREADMAIN$POINTER$$POINTER ()
#17 0x0000000000493590 in ?? ()
#18 0x0000000000a1b9d8 in ?? ()
#19 0x0000000000400000 in ?? ()
#20 0x00000000000004c8 in ?? ()
#21 0x0000000000000000 in ?? ()
Vielen dank im Voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Exception abfangen und Forsetzen

  Alt 22. Dez 2020, 15:09
Wie sieht denn dein Quelltext in uSendMailThrdRuleVx.pas um die Zeile 651 aus?
  Mit Zitat antworten Zitat
DelTurbo

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

AW: Exception abfangen und Forsetzen

  Alt 22. Dez 2020, 15:16
Dort logge ich mich aus.
SMTP.Logout;

Die ganze Routine ist mit try except. Aber es kommt kein except. Ich denke mal weil es im sysdeps/unix/sysv/linux/write.c:26 passiert und nicht in meinem Programm.

Edit: Vielleicht ist es noch wichtige das ich das mit CustApp mache.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DelTurbo

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

AW: Exception abfangen und Forsetzen

  Alt 23. Dez 2020, 12:15
Hi,
das Programm ist heute Nacht wieder abgeschmiert. Er kommt allerdings NICHT durch das HandleException wenn das passiert. Kann man das ändern? Was mache ich falsch? Das Programm ist nicht gestript.

Vielen dank 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.063 Beiträge
 
Delphi 12 Athens
 
#5

AW: Exception abfangen und Forsetzen

  Alt 23. Dez 2020, 14:18
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DelTurbo

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

AW: Exception abfangen und Forsetzen

  Alt 23. Dez 2020, 14:25
Aber vermutlich sollte sich dann zumindestens in der Windows-Ereignisanzeige ein Eintrag finden lassen.
Hi,
erstmal danke für die Antwort. Aber das ist ein Unix Konsolen Programm. Steht im ersten Beitrag. Im moment starte ich die Threads wie folgt:
BeginThread(@SendThread,@ThreadData[Idx]);

Ist unter Unix die TThread version besser?
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Exception abfangen und Forsetzen

  Alt 23. Dez 2020, 14: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.063 Beiträge
 
Delphi 12 Athens
 
#8

AW: Exception abfangen und Forsetzen

  Alt 23. Dez 2020, 15: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?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DelTurbo

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

AW: Exception abfangen und Forsetzen

  Alt 28. Dez 2020, 12: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.063 Beiträge
 
Delphi 12 Athens
 
#10

AW: Exception abfangen und Forsetzen

  Alt 28. Dez 2020, 14: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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:28 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