Jörg: Trace

Hallo,
gibt es für Perl eine (Freeware-)Testhilfe, wie den trace (Anzeige aller durchlaufener Statements)?
Gruß
Jörg

  1. gibt es für Perl eine (Freeware-)Testhilfe, wie den trace (Anzeige aller durchlaufener Statements)?

    Zur Unterstützung bei der Entwicklung von Perlscripten gibt es die Modulgruppe Devel::. Ansonsten beschreibe mal genauer, um was es dir geht.

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
    1. Hallo!
      Es passiert immer wieder, dass ich (man) nicht weiß, welche Programmzweige das Programm durchläuft.
      Es gibt nun die mühsame Möglichkeit an zig Stellen im Programm einen
      print durchzuführen. Dies können allerdings sehr viele sein - und die muss man dann alle wieder entfernen. Zu diesem Zweck gibt es an den Großrechnern den trace, der "beliebig" fein eingestellt werden kann.

      • Zeige die durch laufenden Programme
      • Zeige die durchlaufenen Unterprogramme (calls)
        ....
      • Zeige die durchlaufenen statements
      • Zeige obiges ab hier / beende obiges ab hier
        Gruß
        Jörg
      1. Es passiert immer wieder, dass ich (man) nicht weiß, welche Programmzweige das Programm durchläuft. Es gibt nun die mühsame Möglichkeit an zig Stellen im Programm einen print durchzuführen. Dies können allerdings sehr viele sein - und die muss man dann alle wieder entfernen. Zu diesem Zweck gibt es an den Großrechnern den trace, der "beliebig" fein eingestellt werden kann.

        Hast du dich mal durch die Devel-Module geklickt? Da gibt es Devel::Backtrace, Devel::CallTrace (mit Hinweisen auf weitere Module, die ähnliches tun, z.B. Debug::Trace) und natürlich diverse manpages in Perl selber, als Einstieg perldebtut.

        Siechfred

        --
        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
        1. Hi,

          Hast du dich mal durch die Devel-Module geklickt?

          Hab ich. Das ist ja eine mittlere Katastrophe, was man da lesen muss, um vielleicht irgendwann einen trace aufsetzen zu können. In der Beziehung lobe ich mir den Großrechner!
          Vielleicht hat mir jemand ein kleines Beispiel?

          als Einstieg perldebtut.

          der da vorgestellte debugger funktioniert nur beim Aufruf von perl in der command-Zeile, nicht aber in der Browserumgebung.
          Gruß Jörg

          1. Hast du dich mal durch die Devel-Module geklickt?

            Hab ich. Das ist ja eine mittlere Katastrophe, was man da lesen muss, um vielleicht irgendwann einen trace aufsetzen zu können. In der Beziehung lobe ich mir den Großrechner!

            Naja, ohne ein bisschen zu lesen wirst du auch diesen trace nicht auf den Großrechner aufgesetzt haben. Die Frage ist hier aber von welcher Programmiersprache du sprichst? Da es grosse Unterschiede zwischen Skriptsprachen kompilierte Sprachen gibt.

            Vielleicht hat mir jemand ein kleines Beispiel?

            als Einstieg perldebtut.
            der da vorgestellte debugger funktioniert nur beim Aufruf von perl in der command-Zeile, nicht aber in der Browserumgebung.

            CGI Programme zu debuggen ist so oder so nicht einfach, da gibt es sicher viele Wege. Ich benutze eine globale Funktion, die im Debugmodus mir Werte ausgibt und ansonsten nichts tut.

            Es gibt auch eine IDE mit der du auch CGI Perlprogramme debuggen kannst: komodo die ist aber nicht kostenlos.

            Struppi.

            1. Naja, ohne ein bisschen zu lesen wirst du auch diesen trace nicht auf den Großrechner aufgesetzt haben.

              In Cobol genügte als einfachste Variante: ready trace bzw. reset trace
              damit hast Du fast alles erschlagen.
              Der Debugger DEVEL in Perl setzt allerdings sehr viele Kenntnisse in Perl voraus. Wenn ich die einmal habe, brauche ich wahrscheinlich den Debugger nicht mehr.
              Gruß
              Jörg

              1. Hallo Jörg!

                Der Debugger DEVEL in Perl setzt allerdings sehr viele Kenntnisse in Perl voraus. Wenn ich die einmal habe, brauche ich wahrscheinlich den Debugger nicht mehr.

                ;)

                Weswegen in vielen Fälle der (wohlgemerkt: alleinige) Hinweis auf Manpages einem OP selten hilft. Es sollte deswegen versucht werden, zu erklären - und ergänzend ruhig auf die Manpages verweisen.

                Viele Grüße aus Frankfurt/Main,
                Patrick

                --

                _ - jenseits vom delirium - _
                [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                Nichts ist unmöglich? Doch!
                Heute schon gegökt?
          2. Vielleicht hat mir jemand ein kleines Beispiel?

            Aber klar, so schlimm ist das gar nicht. Mal ein ziemlich sinnloses Beispiel:

            use strict;  
            use diagnostics;  
            use Data::Dumper;  
            # Beim Einbinden des Debuggers musst du die zu ueberwachenden  
            # Funktionen angeben, in meinem Fall flip, s.a. package Nonsense  
            use Debug::Trace qw/flip/;  
              
            my @liste = qw(a 241 50 w e);  
            my @uppercase = map { flip($_) } @liste;  
            print Dumper @uppercase;  
              
            sub flip {  
              return ($_[0] =~ /^[a-z]+$/ ? Nonsense::numify(shift) : Nonsense::stringify(shift));  
            }  
              
            package Nonsense;  
              
            use Debug::Trace qw/numify stringify/;  
              
            sub numify {  
              return ord shift;  
            }  
              
            sub stringify {  
              return chr shift;  
            }  
              
            1;
            

            Ausgabe:

            TRACE: main::flip("a") called at mini.pl line 11 package main
            TRACE: Nonsense::numify("a") called at mini.pl line 15 sub main::flip
            TRACE: Nonsense::numify() returned: (97)
            TRACE: main::flip() returned: (97)
            TRACE: main::flip(241) called at mini.pl line 11 package main
            TRACE: Nonsense::stringify(241) called at mini.pl line 15 sub main::flip
            TRACE: Nonsense::stringify() returned: ("\361")
            TRACE: main::flip() returned: ("\361")
            TRACE: main::flip(50) called at mini.pl line 11 package main
            TRACE: Nonsense::stringify(50) called at mini.pl line 15 sub main::flip
            TRACE: Nonsense::stringify() returned: (2)
            TRACE: main::flip() returned: (2)
            TRACE: main::flip("w") called at mini.pl line 11 package main
            TRACE: Nonsense::numify("w") called at mini.pl line 15 sub main::flip
            TRACE: Nonsense::numify() returned: (119)
            TRACE: main::flip() returned: (119)
            TRACE: main::flip("e") called at mini.pl line 11 package main
            TRACE: Nonsense::numify("e") called at mini.pl line 15 sub main::flip
            TRACE: Nonsense::numify() returned: (101)
            TRACE: main::flip() returned: (101)

            der da vorgestellte debugger funktioniert nur beim Aufruf von perl in der command-Zeile, nicht aber in der Browserumgebung.

            Aber Debug::Trace funktioniert auch im CGI-Kontext, die Trace-Ausgaben werden dort ins Error-Log geschrieben.

            Siechfred

            --
            Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
            1. Hallo,
              das hat mir jetzt viel geholfen, danke!
              Gruß
              Jörg