Devel::TraceUse - Verwendete Module übersichtlich auflisten

Veröffentlicht von Thomas Fahle am (Permalink)

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:

trace-use-small.png

 

Siehe auch

Weitere Posts