Beate Mielke: Perl-Debugger

Hallo Forum,

weiss jemand, wie man bei dem normalen Perl-Debugger (perl -d Programmname) einen Variableninhalt uebergibt, der normalerweise vom Benutzer des Programms mitten im Programm eingegeben wird.

Z.B.:

Bitte geben Sie Ihren Namen ein: ...

Diese Zeile erscheint aber im Debugger nicht. Könnte man solche Variableninhalte z.B. schon beim Aufruf des Debuggers uebergeben, und wenn ja, wie, oder wie geht so etwas generell?

Viele Gruesse

Beate Mielke

  1. Z.B.:

    Bitte geben Sie Ihren Namen ein: ...

    Versuch es doch mal mit $name=<STDIN>.
    Weiss aber nicht ob es klappt !

    1. Hallo Sung-Joon,

      Versuch es doch mal mit $name=<STDIN>.
      Weiss aber nicht ob es klappt !

      Klappt auch nicht :-(

      Es ist naemlich voellig egal, ob man  nach so einer Anweisung <stdin> oder gleich den Wert eingibt. Es verzoegert sich dadurch nur um eine Zeile.

      Viele gruesse

      Beate Mielke

  2. Hallo Forum,

    weiss jemand, wie man bei dem normalen Perl-Debugger (perl -d Programmname) einen Variableninhalt uebergibt, der normalerweise vom Benutzer des Programms mitten im Programm eingegeben wird.

    Z.B.:

    Bitte geben Sie Ihren Namen ein: ...

    Diese Zeile erscheint aber im Debugger nicht. Könnte man solche Variableninhalte z.B. schon beim Aufruf des Debuggers uebergeben, und wenn ja, wie, oder wie geht so etwas generell?

    Hi Beate,

    wenn du unter WIN mit Perl arbeitest, so liegt der ActiveState-Distribution ein Debugger mit graphischer Oberfläche bei, bei dem man während der Laufzeit Variableninhalte einsehen und ändern kann.
    Unter LINUX weiß ich leider nicht, ob das auch geht.

    Gruß
    Timothy

  3. Hallo Beate,

    ich habe noch einmal nachgeschlagen. dies wird jetzt ein etwas längerer Exkurs. Allerdings zitiere ich nur aus einem Buch. Praktisch kann ich das nicht testen, da bei "perl -d prog.pl" bei mir immer der Debugger mit der grafischen Oberfläche gestartet wird. Aber es soll folgendermaßen funktionieren.

    Wenn Du Dein Programm wie oben gezeigt aufrufst, dann sollte er sich u.a. mit folgender Ausschrift melden :
    <cite>

    main::(debug.pl:3)   my $var1 = 1;
    DB<1>
    In der letzten Bildschirmausgabe erkennen Sie jetzt die erste Anweisung des Programms. Falls Ihnen das zuwenig sein sollte, können Sie ein Minuszeichen (gefolgt von einem wagenrücklauf) eingeben. Der Debugger stellt daraufhin den gesamten Text des Programms dar: ....

    ... Durch eingabe von s ( für step) gelangen Sie zur nächsten Anweisung. Wenn Sie die Anweisung wiederholen, kommen Sie wieder einen Schritt weiter.. Sie können aber auch nur ENTER (Taste!) eingeben um das letzte Kommando (also s) zu wiederholen......

    Den Inhalt von Variablen inspizieren ....

    Wenn Sie wollen, können Sie sich den Inhalt der Variablen $var3 anschauen, der an dieser Stelle des Programms vorliegt. Auch dafür gibt es wieder einen Befehl: p (von print). Nach der Aufforderung etwas auszugeben, müssen Sie noch sagen, was Sie ausgeben wollen. Im Beispiel die Variable $var3.

    DB<2> p $var3

    3

    DB<3>
    ....

    Falls Ihnen das Ergebnis nicht paßt, können Sie den Wert auch ändern, indem Sie einfach

    DB<3> $var3 = 5;

    zuweisen. Das ist genau die gleiche Schreibweise, wie sie auch innerhalb eines Perl-Programms verwendet wird. Wenn Sie sich jetzt aber noch einmal anschauen, was in $var3 steht, so werden Sie den Wert 5 finden.
    </cite>

    Vielleicht hilft Dir das ja.

    Gruß
    Timothy

    1. Hallo Timothy,

      ich habe Deine Befehle ausprobiert, aber leider funktionieren sie alle nicht in meinem Fall.
      Übrigens arbeite ich in diesem Fall unter Unix.

      Viele Gruesse

      Beate Mielke

      1. Hallo Timothy,

        ich habe Deine Befehle ausprobiert, aber leider funktionieren sie alle nicht in meinem Fall.
        Übrigens arbeite ich in diesem Fall unter Unix.

        Viele Gruesse

        Beate Mielke

        hallo Beate,

        Ausgehend von diesem kleinem Testprogramm...
        #!/usr/bin/perl -w
        #Testprogramm fuer Debugger
        print "Gib bitte deinen Namen ein\n";
        $name = <STDIN>;
        print "$name\n";

        ...rufe ich den Debugger auf (unter Linux)
        Programmaufruf: perl -d testdebug.pl
        ...folgende Ausgabe:
        Loading DB routines from perl5db.pl version 1.0401
        Emacs support available.

        Enter h or `h h' for help.

        main::(testdebug.pl:5): print "Gib bitte deinen Namen ein\n";
          DB<1> s   (<< hier habe ich s return eingegeben)
        Gib bitte deinen Namen ein
        main::(testdebug.pl:6): $name = <STDIN>;
          DB<1>     (<< hier habe ich return eingegeben)
        Uli      (<< hier habe ich Uli return eingegeben)
        main::(testdebug.pl:7): print "$name\n";
          DB<1>  $name="Sabine";  (<<hier habe ich  
                                   << $name="Sabine" eingegeben.
                                   <<Dabei ist wichtig,
                                   <<dass du zuerst ein Leerzeichen eingibst.
              <<Dadurch wird der Wert der Variable
                                   <<geaendert.)

        DB<2>     (<< hier habe ich nochmal return eingegeben)
        Sabine
                    (<< und es wird der veraenderte Wert ausgegeben)
        Debugged program terminated.  Use q to quit or R to restart,
          use O inhibit_exit to avoid stopping after program termination,
          h q, h R or h O to get additional info.
          DB<1> q   (<< q return beendet den Debugger)
          
        Ich hoffe, ich kann dir damit helfen. Die Debugger-Kommandos kannst du durch
        die Eingabe perldoc perldebug angucken. Einfach mal ein bisschen rumprobieren...
        Uli

      2. ich habe Deine Befehle ausprobiert, aber leider funktionieren sie alle nicht in meinem Fall.
        Übrigens arbeite ich in diesem Fall unter Unix.

        Tut mir leid,
        anscheinend hat hier WIN mal kurz die Nase vorn (warum gibts diesen Debugger den nich benutzte nicht auch für UNIX).

        Aber das Posting von Uli zeigt ja, daß es wie beschrieben irgendwie doch gehen soll.

        Ich hoffe es für Dich.

        Gruß
        Timothy