Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

Debugging mit debug_backtrace() und debug_print_backtrace()

Sie befinden sich: Home > Php Tutorial > Debugging mit...

Debugging mit debug_backtrace() und debug_print_backtrace()


Eintrag am:  12.08.2010
Hits / Besucher:  5012
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Bei der Fehlersuche in größeren Projekten stellt sich oft die Frage: Von wo wurde eine bestimmte Funktion aufgerufen? PHP bietet mit debug_backtrace() ein mächtiges Werkzeug, das den kompletten Aufrufpfad bis zur aktuellen Stelle im Code zurückgibt.

Grundlagen: Was ist ein Backtrace?

Ein Backtrace (auch Stack Trace genannt) zeigt die Kette aller Funktionsaufrufe, die zur aktuellen Codezeile geführt haben. Jeder Eintrag enthält den Dateinamen, die Zeilennummer, den Funktionsnamen und die übergebenen Argumente.

<?php

function berechne(int $a, int $b): int
{
/* Backtrace an dieser Stelle ausgeben */
echo '<pre>';
print_r(debug_backtrace());
echo '</pre>';

return $a + $b;
}

function verarbeite(): void
{
$ergebnis = berechne(3, 7);
}

verarbeite();
?>

Die Ausgabe zeigt zwei Einträge: Zuerst den Aufruf von berechne() durch verarbeite() und dann den Aufruf von verarbeite() aus dem Hauptskript. So lässt sich genau nachvollziehen, welchen Weg die Ausführung genommen hat.

Die Schnellvariante: debug_print_backtrace()

Für schnelles Debugging gibt es debug_print_backtrace(), die den Backtrace direkt als formatierten Text ausgibt, ohne dass print_r() oder var_dump() nötig sind:

<?php

function fehlerhafteFunktion(): void
{
debug_print_backtrace();
}

function controller(): void
{
fehlerhafteFunktion();
}

controller();
/* Ausgabe:
#0 fehlerhafteFunktion() called at [script.php:9]
#1 controller() called at [script.php:12] */
?>

Das ist kompakter und oft übersichtlicher als die Array-Ausgabe von debug_backtrace().

Optionen und Tiefe begrenzen

Beide Funktionen akzeptieren optionale Parameter, um die Ausgabe zu steuern. Mit DEBUG_BACKTRACE_IGNORE_ARGS werden die Funktionsargumente ausgeblendet, was bei großen Objekten viel Speicher spart. Der zweite Parameter begrenzt die Tiefe:

<?php

/* Nur die letzten 3 Aufrufe,
ohne Argumente */
$trace = debug_backtrace(
DEBUG_BACKTRACE_IGNORE_ARGS,
3
);

/* Oder bei der Print-Variante: */
debug_print_backtrace(
DEBUG_BACKTRACE_IGNORE_ARGS,
3
);
?>

In tief verschachteltem Code mit vielen Ebenen kann die Begrenzung der Tiefe die Ausgabe deutlich übersichtlicher machen.

Praxisbeispiel: Eigene Log-Funktion

Ein praktischer Einsatz von debug_backtrace() ist eine Log-Funktion, die automatisch protokolliert, von wo sie aufgerufen wurde:

<?php

function logMessage(string $nachricht): void
{
$trace = debug_backtrace(
DEBUG_BACKTRACE_IGNORE_ARGS,
1
);
$caller = $trace[0];

$eintrag = sprintf(
"[%s] %s:%d - %s",
date('Y-m-d H:i:s'),
basename($caller['file']),
$caller['line'],
$nachricht
);

error_log($eintrag);
}

/* Verwendung irgendwo im Code: */
logMessage('Benutzer hat sich eingeloggt');
/* Log: [2026-02-23 14:30:00] login.php:42 - Benutzer hat sich eingeloggt */
?>

Die Funktion liest aus dem Backtrace die Datei und Zeilennummer des Aufrufers und schreibt diese zusammen mit der Nachricht ins Error-Log. So sieht man sofort, woher eine Log-Meldung stammt, ohne den Dateinamen manuell angeben zu müssen.

Hinweis zur Performance

debug_backtrace() ist für die Entwicklung und Fehlersuche gedacht. Im Produktivbetrieb sollte es nicht in Schleifen oder häufig aufgerufenen Funktionen stehen, da das Sammeln der Aufrufkette Speicher und Zeit kostet. Für produktiven Code bieten sich stattdessen Logging-Bibliotheken wie Monolog an, die performanter arbeiten.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.