Warum gibt es mehrere c-Dateien in der Symboltabelle von% main ::?

8
%Vor%

Warum sind sie in der Symboltabelle von %main:: , wann sind sie nützlich?

    
Je Rog 25.06.2011, 03:56
quelle

2 Antworten

2

Um die Ausgabe der Frage zu wiederholen, führen Sie

aus %Vor%

Die Einträge, die Sie sehen, werden in gv_fetchfile_flags eingefügt :

%Vor%

Dies wird oft über newXS als Teil des Startvorgangs in S_parse_body .

%Vor%

Beachten Sie, dass Sie in der Ausgabe auch Einträge für perlio.c , universal.c und mro.c sehen.

Der Abschnitt Debugger Internals der perldebguts-Dokumentation erklärt ihre Verwendung:

  

Wenn Sie zum Beispiel die integrierte Aufruffunktion von Perl aus dem Paket DB aufrufen, werden die Argumente, mit denen der entsprechende Stapelrahmen aufgerufen wurde, in das Array @DB::args kopiert. Diese Mechanismen werden aktiviert, indem Perl mit dem Schalter -d aufgerufen wird. Im Einzelnen sind die folgenden zusätzlichen Funktionen aktiviert (siehe $^P in perlvar ):

     
  • ...
  •   
  • Jedes Array @{"_<$filename"} enthält die Zeilen von $filename für eine von Perl kompilierte Datei. Dasselbe gilt auch für evaluierte Strings, die Unterroutinen enthalten oder die gerade ausgeführt werden. Die $filename für die bewerteten Strings sieht wie (eval 34) aus. Code-Assertionen in Regexen sehen wie (re_eval 19) aus.
  •   
  • Jeder Hash %{"_<$filename"} enthält Haltepunkte und Aktionen, die mit der Zeilennummer verknüpft sind. Einzelne Einträge (im Gegensatz zum gesamten Hash) sind einstellbar. Perl interessiert hier nur für Boolean true, obwohl die von perl5db.pl verwendeten Werte die Form "$break_condition${"_<$filename"}$action" haben.
      Dasselbe gilt für ausgewertete Strings, die Subroutinen enthalten oder die gerade ausgeführt werden. Der $ filename für bewertete Strings sieht wie folgt aus (Eval 34) oder (re_eval 19).
  •   
  • Jeder Skalar "_<$filename" enthält $filename . Dies gilt auch für ausgewertete Strings, die Subroutinen enthalten oder gerade ausgeführt werden. Die (eval 34) für die bewerteten Strings sieht wie (re_eval 19) oder DB::postponed(*{"_<$filename"}) aus.
  •   
  • Nachdem jede erforderliche Datei kompiliert wurde, aber bevor sie ausgeführt wird, wird DB::postponed aufgerufen, wenn das Unterprogramm $filename existiert. Hier ist %INC der erweiterte Name der erforderlichen Datei, wie in den Werten von %code% .
  • gefunden   
  • ...
  •   
    
Greg Bacon 28.06.2011 16:31
quelle
1

Da perl eine Sprache ist, die auf einem Interpreter basiert, braucht es, richtig, seinen Interpreter , die Perl-Binärdatei. Diese Binärdatei liest nur das Perl-Skript und führt den Code durch Übersetzen in Maschinencode aus.

Ihr Perl-Interpreter ist mit Debug-Symbolen kompiliert und enthält Informationen über die Quelldateien, aus denen er erstellt wurde. Außerdem sehen Sie in Ihrem Beispiel die Objekte der geladenen Module Data::Dumper .

Ich hoffe, das hilft

    
Thomas Berger 27.06.2011 22:33
quelle

Tags und Links