The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::Stacktrace - Generiere und visualisiere einen Stacktrace

SYNOPSIS

  use Quiq::Stacktrace;
  
  my $st = Quiq::Stacktrace->new; # generiere Stacktrace
  print $st->asString,"\n";       # visualisiere Stacktrace
  
  -or-
  
  print Quiq::Stacktrace->asString,"\n"; # in einem Aufruf

DESCRIPTION

Ein Objekt der Klasse repräsentiert die Aufrufhierarchie des laufenden Perl-Programms zum Zeitpunkt der Instantiierung des Stacktrace-Objektes.

Die Klasse kann zum Debuggen verwendet werden oder bei der Erzeugung von Exceptions.

Folgendes Beispielprogramm (test.pl)

  #!/usr/bin/env perl
  
  use Quiq::Stacktrace;
  
  sub a {
      b();
  }
  
  sub b {
      c();
  }
  
  sub c {
      print Quiq::Stacktrace->asString,"\n";
  }
  
  a();

erzeugt die Ausgabe

  main::a() [+17 ./test.pl]
    main::b() [+6 ./test.pl]
      main::c() [+10 ./test.pl]
        Quiq::Stacktrace::asString() [+14 ./test.pl]

Von oben nach unten gelesen gibt der Stacktrace die Hierarchie der Subroutine-Aufrufe (= Methoden oder Funktionsaufrufe) in der Aufrufreihenfolge wieder. Jede Zeile beschreibt einen Subroutine-Aufruf:

  main::a() [+17 ./test.pl]
  ^     ^     ^  ^
  |     |     |  +-- Datei, in der der Aufruf steht
  |     |     +-- Zeilennummer, an der der Aufruf in der Datei steht
  |     +-- Name der aufgerufenen Subroutine
  +-- Package, zu dem die Subroutine gehört

Die in eckigen Klammern genannte Quelltextposition kann bei Aufruf von vi(1), emacs(1) oder less(1) benutzt werden, um unmittelbar auf die entsprechende Zeile zu positionieren:

  $ less +17 ./test.pl

Der unterste Eintrag im Stacktrace ist der Aufruf des Konstruktors new() oder der Methode asString(), wenn sie als Klassenmethode gerufen wird. Sollen Stacktrace-Frames am Ende weggelassen werden, kann dies durch Angabe des Parameters $i erreicht werden.

METHODS

Instantiierung

new() - Konstruktor

Synopsis

  $st = $class->new;
  $st = $class->new($i);

Arguments

$i (Default: 0)

Anzahl der Stackframes vom Ende des Stacktrace, die nicht berücksichtigt werden. Ist $i == 0 (was der Default ist), werden alle Frames berücksichtigt.

Description

Instantiiere ein Stacktrace-Objekt und liefere eine Referenz auf diese Objekt zurück. Das Stacktrace-Objekt repräsentiert die Aufruf-Hierarchie des laufenden Perl-Programms zum Zeitpunkt der Instantiierung. Letztes Element in der Hierarchie ist der Konstruktor-Aufruf. Soll der Stacktrace vorher enden,

Externe Repräsentation

asString() - Visualisiere Stacktrace-Objekt

Synopsis

  $str = $st->asString;
  $str = $class->asString($i);

Arguments

$i (Default: 0)

Siehe new().

Description

Visualisiere das Stacktrace-Objekt in Form einer Zeichenkette und liefere diese zurück. Aufbau der Zeichenkette siehe Abschnitt DESCRIPTION.

VERSION

1.196

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2021 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.