Bessinger: Fehlersuche (Trace)

Hallo,
kennt jemand eine Möglichkeit zu erkennen, an welcher Stelle ein bestimmtes Feld seinen Wert ändert, ohne dass ich an jeder möglichen Stelle den Wert anzeige?
Gruß
Bessinger

  1. kennt jemand eine Möglichkeit zu erkennen, an welcher Stelle ein bestimmtes Feld seinen Wert ändert, ...

    Was für ein Feld?

    Struppi.

    1. kennt jemand eine Möglichkeit zu erkennen, an welcher Stelle ein bestimmtes Feld seinen Wert ändert, ...

      Was für ein Feld?

      Sorry: Eine Perl-Variable!

      1. kennt jemand eine Möglichkeit zu erkennen, an welcher Stelle ein bestimmtes Feld seinen Wert ändert, ...
        Was für ein Feld?
        Sorry: Eine Perl-Variable!

        http://search.cpan.org/~roode/Readonly-1.03/Readonly.pm

        mfg Beat;

        --
        Woran ich arbeite:
        X-Torah
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        1. Hallo,

          http://search.cpan.org/~roode/Readonly-1.03/Readonly.pm

          mfg Beat;

          Leider habe ich mich immer noch nicht klar ausgedrückt.
          Mit der obigen Methode kann ich zwar erkennen, wo die Perl-Variable zum ersten Male geändert wird (werden soll), denn dort bricht das Programm ab.
          Der Programmfehler liegt aber meist nicht an der ersten Stelle, sondern die Variable wird x-mal korrekt geändert und erhält dann plötzlich einen falschen Wert.
          Ich hätte daher gerne alle Stellen, wo eine Änderung erfolgt
          Der Trace sollte etwa folgendes liefern:

          Zeile 17, Wert alt, Wert neu
          Zeile 45, Wert alt, Wert neu
          Zeile 45, Wert alt, Wert neu
          Zeile 45, Wert alt, Wert neu
          Zeile 45, Wert alt, Wert neu
          Zeile 45, Wert alt, Wert neu
          Zeile 17, Wert alt, Wert neu
          ....

          1. Leider habe ich mich immer noch nicht klar ausgedrückt.

            Das ist wohl war.

            Der Programmfehler liegt aber meist nicht an der ersten Stelle, sondern die Variable wird x-mal korrekt geändert und erhält dann plötzlich einen falschen Wert.

            Warum prüfst du nicht einfach auf die Gültigkeit des Wertes und brichst dann im Fehlerfall ab?

            Ich hätte daher gerne alle Stellen, wo eine Änderung erfolgt
            Der Trace sollte etwa folgendes liefern:

            Ich hab keine Ahnung ob es so ein Modul gibt, aber vielleicht ist eines von den Devel Modulen das was du suchst?

            Struppi.

  2. Glückwunsch, Bessinger, die Auskunftsqualität des Forums ist mal wieder unter aller Sau. Was du möchtest, ist nicht Trace, sondern Watch.

      
    $ perl -de'while (1) {  
    
    >     $foo++;  
    >     $bar++;  
    > }'  
      
      
      
      
    Loading DB routines from perl5db.pl version 1.3  
    Editor support available.  
      
    Enter h or `h h' for help, or `man perldebug' for more help.  
      
    main::(-e:1):   while (1) {  
      DB<1> w $foo  
      DB<2> n  
    main::(-e:2):       $foo++;  
      DB<2> n  
    Watchpoint 0:   $foo changed:  
        old value:  ''  
        new value:  '1'  
    main::(-e:3):       $bar++;  
      DB<2> n  
    main::(-e:2):       $foo++;  
      DB<2> n  
    Watchpoint 0:   $foo changed:  
        old value:  '1'  
        new value:  '2'  
    main::(-e:3):       $bar++;  
      DB<2> n  
    main::(-e:2):       $foo++;  
      DB<2> n  
    Watchpoint 0:   $foo changed:  
        old value:  '2'  
        new value:  '3'  
    main::(-e:3):       $bar++;  
      DB<2> W *  
    Deleting all watch expressions ...  
      DB<3> q  
    
    
    1. Glückwunsch, Bessinger, die Auskunftsqualität des Forums ist mal wieder unter aller Sau.

      Danke. Aber was bedeutet dein pauschaler Vorwurf?

      $ perl -de'while (1) {

      $foo++;
           $bar++;
      }'

      Du bist sicher, dass er den Debugger anwerfen möchte? Ich nicht.
      Aber vielleicht hast du ja Recht und wenn nicht hab ich was gelernt, den Debugger benutze ich so gut wie nie, da zumindest bei CGI Programmen nur wenig nützlich ist.

      Struppi.

      1. Hallo Struppi.

        Ich bin kein Regular mehr hier, schaue ab und zu vorbei. Mein Vorwurf bedeutet: aus der Erfahrung weiß ich, dass Trivialfragen recht gut abgefrühstückt werden können; Fragen gehobenen Anspruchs auf eine Weise beantwortet werden, dass ich mich fremdschämen muss. Leider ist es durch verkrustete Strukturen, falschen Stolz und diverse andere Umstände keine Möglichkeit auf allgemeine Qualitätsbesserung gegeben, und ich habe auch aufgegeben, die Lage verbessern zu wollen. Die Personen, die Teil des Problems sind, erkennen es nicht, und wollen es auch gar nicht wahrnehmen. Aber das ist doch jetzt sehr off-topic.

        Du bist sicher, dass er den Debugger anwerfen möchte? Ich nicht.

        Ich ziemlich, OP sprach von Trace, das ist ein Merkmal von Debuggern.

        den Debugger benutze ich so gut wie nie, da zumindest bei CGI Programmen nur wenig nützlich ist.

        Darf ich dir vielleicht Devel::ebug::HTTP ans Herz legen?

        1. Ich bin kein Regular mehr hier, schaue ab und zu vorbei. Mein Vorwurf bedeutet: aus der Erfahrung weiß ich, dass Trivialfragen recht gut abgefrühstückt werden können; Fragen gehobenen Anspruchs auf eine Weise beantwortet werden, dass ich mich fremdschämen muss. Leider ist es durch verkrustete Strukturen, falschen Stolz und diverse andere Umstände keine Möglichkeit auf allgemeine Qualitätsbesserung gegeben, und ich habe auch aufgegeben, die Lage verbessern zu wollen. Die Personen, die Teil des Problems sind, erkennen es nicht, und wollen es auch gar nicht wahrnehmen. Aber das ist doch jetzt sehr off-topic.

          Du bist herzlich eingeladen dies zu ändern. Ich kann dir auch nicht zustimmen, dass das hier so wäre, im gegenteil ich glaube jeder der hier sich mit Perl beschäftigt ist interessiert an der Verssserung der Qualität der Antworten. Deinen leicht vorwurfsvollen Ton, finde ich eigentlich nicht angebracht, jeder hat bisher versucht nach besten Wissen zu antworten, zumal die Frage - für mich zumindest - nicht so eindeutig ist, wie offentichtlich für dich.

          Du bist sicher, dass er den Debugger anwerfen möchte? Ich nicht.
          Ich ziemlich, OP sprach von Trace, das ist ein Merkmal von Debuggern.

          Das ist mir klar, allerdings wundert es mich, dass er nicht den Debugger ansprach. Den ich, wie gesagt, nicht gut kenne, aber soweit ich mich erinnere doch eine umfangreiche Hilfe hat und sogar in deinem Beispiel wird das angezeigt. Ist in der Hilfe nicht der Befehl für watch aufgeführt?

          Naja, wir Wissen es nicht, mal sehen was der OP dazu meint.

          den Debugger benutze ich so gut wie nie, da zumindest bei CGI Programmen nur wenig nützlich ist.
          Darf ich dir vielleicht Devel::ebug::HTTP ans Herz legen?

          Ich verwende im Zweifel lieber Komodo. Catalyst hab ich bisher noch nicht geschafft unterwindows zu installieren.

          Struppi.

          1. Hallo,
            Anon hat genau das getroffen, was ich suche!

            Du bist sicher, dass er den Debugger anwerfen möchte? Ich nicht.
            Ich ziemlich, OP sprach von Trace, das ist ein Merkmal von Debuggern.

            Warum klebt Ihr so an Begriffen?
            Trace ist ein Begriff, der jedem Host(Großrechner)-Programmierer bekannt ist.
            Mir ist auch der Begriff Debugger bekannt.
            Aber muss ich alle mir bekannten Begriffe aufführen, damit Ihr wisst, was ich möchte?
            Und wenn ich weiß, es gibt einen Tracer oder einen Debugger oder einen Dingsbums, der das macht, was ich suche, brauche ich nicht hier zu fragen!
            Und was, wenn der Fragende tatsächlich nicht weiß was ein trace, ein debugger etc. ist?
            Also genauer als zu schreiben, "ich möchte bei Änderung eines Feldes wissen alter Wert/neuer Wert" geht es wohl kaum!
            Gruß
            Bessinger

            1. Warum klebt Ihr so an Begriffen?

              Vieleicht weil wir deine Frage verstehen wollten, tut mir leid.

              Trace ist ein Begriff, der jedem Host(Großrechner)-Programmierer bekannt ist.
              Mir ist auch der Begriff Debugger bekannt.
              Aber muss ich alle mir bekannten Begriffe aufführen, damit Ihr wisst, was ich möchte?

              Nein, aber warum hast du als so erfahrener Programmierer nicht einfach in die Hilfe des Debuggers geschaut?

              Und wenn ich weiß, es gibt einen Tracer oder einen Debugger oder einen Dingsbums, der das macht, was ich suche, brauche ich nicht hier zu fragen!

              Ach so, du kennst ihn nicht. Warum hast du nicht nach einem Debuger gefragt?
              Dann wäre es das ganze wesentlich einfacher gewesen. Ich hätte z.b. gewußt, dass ich dir dabei nicht helfen kann.

              Und was, wenn der Fragende tatsächlich nicht weiß was ein trace, ein debugger etc. ist?

              Was dann?

              Also genauer als zu schreiben, "ich möchte bei Änderung eines Feldes wissen alter Wert/neuer Wert" geht es wohl kaum!

              Das ist für deine Frage die ungenauste Formulierung die ich mir vorstellen kann, ein Feld kann alles mögliche sein, keiner hier weiß was du gerade machst und was du mit dem Begriff Feld konkret meinst. Zumal du eine Variabel meinst oder konkret einen Skalar, aber wir sollen erraten was du meinst.

              Tut mir wirklich leid, aber die Fragestellung war nicht hilfreich und nur für jemand der regelmäßig einen Debugger verwendet in Ansätzen erkennbar worum es dir geht. Ich zumindest benutze so gut wie nie den Debugger in Perl, deshalb lag für mich die richtige ausserhalb meiner Vorstellung. Aber ich werde ihn beim nächsten mal Berücksichtigen. wieder was gelernt.

              Struppi.

              1. Träum weiter in deinem Glaskasten!

                1. Träum weiter in deinem Glaskasten!

                  Danke, ich seh zwar nicht warum du versuchst beleidigend zu werden. Es tut mir schrecklich leid, dass ich versucht habe dir zu helfen und dir versucht habe zu erklären warum deine Frage für Aussenstehnde so schwer zu verstehen war.

                  Aber offensichtlich bist du einfach ein arroganter Wichtigtuer, ich werde dich einfach in Zukunft ignorieren, kein Problem.

                  Struppi.

  3. kennt jemand eine Möglichkeit zu erkennen, an welcher Stelle ein bestimmtes Feld seinen Wert ändert, ohne dass ich an jeder möglichen Stelle den Wert anzeige?

    Schau Dir mal Debug::TraceCalls an, das scheint mir komfortabler als der interne Debugger. Ich nutze übrigens ganz gern Debug::Trace, siehe auch mein Sinnlosbeispiel. Ansonsten lies perldebtut, da gibt's auch einige Lösungsansätze.

    Siechfred

    --
    Chancengleichheit bedeutet nicht, dass jeder einen Apfel pflücken kann, sondern dass der Zwerg eine Leiter bekommt.