Devel::TraceUse - Verwendete Module übersichtlich auflisten

| | Kommentare (0)

Devel::TraceUse von Philippe Bruhat (BooK) zeigt die Module, die von einem Perl-Programm genutzt werden, übersichtlich an.

Verwendete Module auflisten

Devel::TraceUse wird auf der Kommandozeile aufgerufen

$ perl -d:TraceUse your_program.pl

Devel::TraceUse erzeugt aus dem folgenden Beispielprogramm:

#!/usr/bin/perl
use strict;
use warnings;

use DBI;

folgende Ausgabe:

Modules used from hierachy.pl:
   1.  strict 1.04, hierachy.pl line 2 [main]
   2.  warnings 1.09, hierachy.pl line 3 [main]
   3.  DBI 1.615, hierachy.pl line 5 [main]
   4.    Carp 1.17, DBI.pm line 159
   5.      Exporter 5.64_01, Carp.pm line 11
  11.        Exporter::Heavy 5.64_01, Exporter.pm line 16
   6.    DynaLoader 1.10, DBI.pm line 160
   7.      Config, DynaLoader.pm line 25
   9.        Config_heavy.pl, Config.pm line 70
  10.          Config_git.pl, Config_heavy.pl line 1224 [Config]
   8.      AutoLoader 5.70, DynaLoader.pm line 22
  12.    Scalar::Util 1.23, DBI.pm line 290
  13.      vars 1.01, Scalar/Util.pm line 10
  14.        warnings::register 1.01, vars.pm line 7
  15.      List::Util 1.23, Scalar/Util.pm line 12
  16.        XSLoader 0.10, List/Util.pm line 26

Die Ausgabe der Core-Module lässt sich über den Schalter =hidecore unterdrücken.

$ perl -d:TraceUse=hidcore your_program.pl

und erzeugt dann für o.g. Beispiel folgende Ausgabe:

Modules used from hierachy.pl:
   3.  DBI 1.615, hierachy.pl line 5 [main]
   9.    Config_heavy.pl, Config.pm line 70
  10.      Config_git.pl, Config_heavy.pl line 1224 [Config]

 

Visualisierung der verwendeten Module

Die Ausgabe von Devel::TraceUse lässt sich mittels eines einfachen Hacks mit GraphViz visualisieren.

#!/usr/bin/env perl
use strict;
use warnings;

use GraphViz;

###########################################################
# Works for me Software(TM)
###########################################################
# Usage:
# Step 1:
# perl -d:TraceUse your-programm.pl 2> TraceUse.out.txt
# or
# perl -d:TraceUse=hidecore your-programm.pl 2> TraceUse.out.txt
# Step2:
# perl $0  TraceUse.out.txt 
###########################################################
# Based on http://use.perl.org/~BooK/journal/34717
###########################################################

#my $png = shift || 'use.png';
my $png =  'trace-use.png';

my $g = GraphViz->new( rankdir => 1 );

my @stack;

while (<>) {

    # Do not graph standard pragmas
    next if m/warnings\s+\d+/;
    next if m/strict\s+\d+/;

    # Remove leading line numbers
    s/^\s+\d+\.//;
	
    # first node
    /^Modules used from (.*):/ && do {
        $g->add_node($1);
        @stack = ($1);
    };

    # all other nodes
    /^((?:  )+)(\S+).*,/ && do {
        my $idx = length($1) / 2;
        $stack[$idx] = $2;
        $g->add_node($2);
        $g->add_edge( $stack[ $idx - 1 ] => $2 );
    };

    # ignore all other lines
}

$g->as_png($png);

Das Programm erzeugt mit o.g. Beispiel folgende Graphik:

/2010/09/trace-use-small.png

 

Siehe auch

Jetzt kommentieren

Über diese Seite

Diese Seite enthält einen einen einzelnen Eintrag von Thomas Fahle vom 28.09.10 21:42.

URI::Find - Extraktion von URIs aus beliebigen Texten ist der vorherige Eintrag in diesem Blog.

Book review: Catalyst 5.8 The Perl MVC Framework ist der nächste Eintrag in diesem Blog.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.