🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.perl
4 messages
4 total messages Started by Ulli Horlacher Tue, 27 Feb 2024 14:00
Signal debugging
#23897
Author: Ulli Horlacher
Date: Tue, 27 Feb 2024 14:00
46 lines
1543 bytes
Ich hab grad 2 h mit dem debugging eines etwas komplexeren Server-Programms
verbracht, das einfach so ohne Fehlermeldung und exit-code terminierte.
Ich konnte zwar die Code Stelle eingrenzen, aber nicht exakt bestimmen wo
genau es abbrach.

Am Schluss hab ich mehr durch Raten herausgefunden, dass es bei einem
syswrite() zu einem SIGPIPE kam mit dem das Programm dann ohne
Fehlermeldung abbrach.

Ja, der Bug ist jetzt gefixt (ich ignoriere SIGPIPE), aber ich frage mich,
ob ich das einfacher und frueher haette herausfinden koennen. Sollte man
immer fuer alle Signale einen Signalhandler aufsetzen um wenigstens eine
Fehlermeldung zu bekommen? Ein "broken pipe error" o.ae. haette mir 2 h
Fehlersuche erspart...

Hier der Codeschnipsel:

    while ($B < $size or $size < 0) {
      unless (defined(syswrite $OUT,$buf)) {
        die "\n$prg: client has closed the connection\n";
      }
      $B += $bs;
      $bt += $bs;
      $t2 = time;
      if ($t2-$t1>1) {
        $tt = ($t2-$t0)||1;
        alarm($timeout);
        status('sending',$B,$size,$tt,$bt/($t2-$t1));
        $t1 = $t2;
        $bt = 0;
      }
    }

    $tt = ($t2-$t0)||1;
    $size = $B if $size < 0;
    status("sent",$B,$size,$tt,$B/$tt);
    alarm(0);


($OUT ist ein network handle)

--
Ullrich Horlacher              Server und Virtualisierung
Rechenzentrum TIK
Universitaet Stuttgart         E-Mail: horlacher@tik.uni-stuttgart.de
Allmandring 30a                Tel:    ++49-711-68565868
70569 Stuttgart (Germany)      WWW:    https://www.tik.uni-stuttgart.de/
Re: Signal debugging
#23898
Author: "Peter J. Holzer
Date: Tue, 27 Feb 2024 17:03
26 lines
1109 bytes
On 2024-02-27 14:00, Ulli Horlacher <framstag@rus.uni-stuttgart.de> wrote:
> Ich hab grad 2 h mit dem debugging eines etwas komplexeren Server-Programms
> verbracht, das einfach so ohne Fehlermeldung und exit-code terminierte.

"Ohne Exit-Code" geht nicht. Ein Prozess terminiert immer mit einem
Exit-Code.

> Ich konnte zwar die Code Stelle eingrenzen, aber nicht exakt bestimmen wo
> genau es abbrach.
>
> Am Schluss hab ich mehr durch Raten herausgefunden, dass es bei einem
> syswrite() zu einem SIGPIPE kam mit dem das Programm dann ohne
> Fehlermeldung abbrach.

In diesem Fall sollte der Exit-Code die Signalnummer enthalten.


> Ja, der Bug ist jetzt gefixt (ich ignoriere SIGPIPE), aber ich frage mich,
> ob ich das einfacher und frueher haette herausfinden koennen. Sollte man
> immer fuer alle Signale einen Signalhandler aufsetzen um wenigstens eine
> Fehlermeldung zu bekommen? Ein "broken pipe error" o.ae. haette mir 2 h
> Fehlersuche erspart...

Schreibt der systemd (oder worüber Du auch immer Deinen Server startest)
nichts in Log, wenn der Server mit Exit-Code != 0 terminiert?

        hp
Re: Signal debugging
#23899
Author: Ulli Horlacher
Date: Tue, 27 Feb 2024 19:22
31 lines
1124 bytes
Peter J. Holzer <hjp-usenet4@hjp.at> wrote:
> On 2024-02-27 14:00, Ulli Horlacher <framstag@rus.uni-stuttgart.de> wrote:
>> Ich hab grad 2 h mit dem debugging eines etwas komplexeren Server-Programms
>> verbracht, das einfach so ohne Fehlermeldung und exit-code terminierte.
>
> "Ohne Exit-Code" geht nicht. Ein Prozess terminiert immer mit einem
> Exit-Code.

echo $? brachte 0


>> Am Schluss hab ich mehr durch Raten herausgefunden, dass es bei einem
>> syswrite() zu einem SIGPIPE kam mit dem das Programm dann ohne
>> Fehlermeldung abbrach.
>
> In diesem Fall sollte der Exit-Code die Signalnummer enthalten.

Leider nein.


> Schreibt der systemd (oder worüber Du auch immer Deinen Server startest)
> nichts in Log, wenn der Server mit Exit-Code != 0 terminiert?

Ich hatte es direkt von der bash gestartet um zu sehen, was passiert.


--
Ullrich Horlacher              Server und Virtualisierung
Rechenzentrum TIK
Universitaet Stuttgart         E-Mail: horlacher@tik.uni-stuttgart.de
Allmandring 30a                Tel:    ++49-711-68565868
70569 Stuttgart (Germany)      WWW:    https://www.tik.uni-stuttgart.de/
Re: Signal debugging
#23900
Author: "Peter J. Holzer
Date: Tue, 27 Feb 2024 21:14
19 lines
828 bytes
On 2024-02-27 19:22, Ulli Horlacher <framstag@rus.uni-stuttgart.de> wrote:
> Peter J. Holzer <hjp-usenet4@hjp.at> wrote:
>> On 2024-02-27 14:00, Ulli Horlacher <framstag@rus.uni-stuttgart.de> wrote:
>>> Ich hab grad 2 h mit dem debugging eines etwas komplexeren Server-Programms
>>> verbracht, das einfach so ohne Fehlermeldung und exit-code terminierte.
>>
>> "Ohne Exit-Code" geht nicht. Ein Prozess terminiert immer mit einem
>> Exit-Code.
>
> echo $? brachte 0

Das ist auch ein Exit-Code ;-).

Aber wenn der 0 ist, dann ist der Prozess *nicht* an einem SIGPIPE
verstorben. Wenn also ein SIGPIPE die Root-Ursache war, dann gab es
schon einen Signalhandler, der SIGPIPE abfängt und behandelt (Perl macht
das jedenfalls nicht von sich aus - gerade mit v5.34 getestet, war aber
meiner Erinnerung nach nie anders).

        hp
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads