Schlagwort-Archive: Debugging

print_r für Perl

Ich nutze unter PHP recht oft die Funktion print_r für’s Debugging. Diese Funktion gibt eine beliebige Variable strukturiert aus. Sinnvoll ist das natürlich am meisten bei Arrays und Objekten.

Für Perl gibt es kein print_r, dafür aber Data::Dumper (CPAN).

Ein kleines Beispiel:

use Data::Dumper;
my @arr = qw(foo bar foobar);
my %hash = (
             foo => 'bar',
             bar => \@arr
           );
print Dumper(\@arr, \%hash);

Das ergibt:

$VAR1 = [
          'foo',
          'bar',
          'foobar'
        ];
$VAR2 = {
          'bar' => $VAR1,
          'foo' => 'bar'
        };

Steht Data::Dumper mal nicht zur Verfügung geht es zur Not auch ohne.

Ein einfaches Array kann man sich so ansehen:

print "@array";

Mit dem Array aus den Beispiel von oben ergibt das:

foo bar foobar

Bei Hashs funktioniert das aber nicht. Hier geht es aber so:

my %hash =  (
              A => 1,
              B => 2,
              C => 3,
            );

{
  local $, = ' ';
  print %hash, $/;
}

Die Ausgabe sieht so aus:

A 1 C 3 B 2

Zugegeben, Data::Dumper ist da optisch besser, aber in der Not frisst der Teufel Fliegen…

Script-Fehler beim IE6 finden

Meldet der IE6 einen Javascript-Fehler, der sich im Firefox nicht nachvollziehen lässt, so wird es schwierig. Der IE6 meldet zwar, er hätte in der Datei xy.php in Zeile x bei Zeichen y einen Fehler gefunden, aber diese Angaben sind irreführend. Oder doch nicht? Wie man dem Fehler auf die Spur kommen kann zeige ich hier.

Beim Aufrufen einer Seite wird zum Beispiel die folgende Fehlermeldung angezeigt:

Screenshot der 1. Fehlermeldung

Im Prinzip ist die Angabe von Zeile und Spalte gar nicht so verkehrt, nur die Datei-Angabe stimmt meist überhaupt nicht, da eine HTML-Seite zum einen oft aus verschiedenen Teilen per PHP zusammengesetzt wird und zum anderen der Javascript-Code häufig in eigene Dateien ausgelagert ist.

Um nun herauszubekommen, in welcher Datei der Teufel im Detail steckt, muss man den Debug-Modus aktivieren und die Anzeige der Script-Fehler ausschalten. Dies geschieht in Extras » Internetoptionen » Erweitert. Dort werden, wie unten gezeigt, die Häkchen bei »Skriptdebugging deaktivieren« und bei »Skriptfehler anzeigen« entfernt. Danach muss der IE neu gestartet werden, damit die Änderungen wirksam werden.

Screenshot der Internetopionen des IE6

Wird nun die betreffende Seite erneut aufgerufen, sieht die Fehlermeldung etwas anders aus:

Screenshot der 2. Fehlermeldung

Hier ist nun auch erstaunlicher Weise von Zeile 14 die Rede! Klick man nun auf »Ja«, wird der IE-Debugger gestartet und die Datei geladen und angezeigt, in der der Internet-Explorer den Fehler gefunden hat. Der Cursor wird allerdings an die Position gesetzt, die in der ersten Fehlermeldung angezeigt wurde: Zeile 15, Spalte 22.

Ausschnitt der Debug-Anzeige

Wenn wir uns aber an die Angabe aus der zweiten Fehlermeldung (Zeile 14) erinnern und unser Augenmerk auf die Zeile über dem Cursor richten, sehen wir dort in Spalte 22 einen zweiten Punkt, der dort nicht hingehört. Dies ist der Fehler!

Das Verfahren ist etwas umständlich, aber immerhin zielführend. Und wenn man sich erst einmal daran gewöhnt bzw. damit abgefunden hat, ist es recht nützlich.