Der Contao Debugger ist eine auf FirePHP und FireBug 1.5 aufsetzende Erweiterung für Contao.

In den umfangreichen Konfigurationen kann man detailliert einstellen, welchen Debug output man gerne erhalten möchte.

Zum momentanen Funktionsumfang gehört das auffangen von Fehlermeldungen, das tracken von HOOKs und SQL-Statements.

Weitere Funktionen sind geplant.

Der Debugger kann und will sich jedoch nicht mit debug tools wie z.B. xdebug messen, welche breakpoints und ähnliches unterstützen sondern möchte die Lücke zwischen solch "professionellen" Debug Umgebungen und der recht spartanischen Debug Ausgabe von Contao schließen und die bislang häufigsten Mittel zum Debuggen von Contao code (var_dump(), print_r() und echo) abzulösen.

Zu diesem Zwecke hängt er sich transparent in den "normalen" Debug-Modus von Contao ein, welcher aus dem globalen Array $GLOBALS['TL_DEBUG'] besteht.

Den Debugger installieren und konfigurieren

Die Installation ist, wie von anderen Extensions gewohnt, recht einfach.
Einfach den Debugger in die Contao installation kopieren und anschliessend kann man im Backend den Debugger schon konfigurieren.
Eine Datenbankanpassung ist nicht notwendig.

Kommen wir zur Konfiguration.

Die Benutzer für welcher der Debugger aktiviert werden soll, müssen explizit in der Liste der Frontend- bzw. Backend-Benutzer angewählt sein. Leider ist die Auswahl ab einer gewissen Userzahl recht unübersichtlich, das ist jedoch aktuell leider nicht anders realisierbar.

Sofern ein Benutzer, für welchen der Debugger aktiviert ist, in Contao angemeldet ist und FirePHP installiert hat, erzeugt der Debugger schon ausgaben in der FireBug Console.

Die Konfiguration ist weiterhin vollkommen hierarchisch aufgebaut.
Das bedeutet, man muss:

  • die Checkbox "Debugger aktivieren" anhaken.
  • bei (mindestens) einem user die Checkbox aktivieren (logisch, sonst kriegt ja keiner debug Ausgaben)
  • eine oder mehrere der Checkboxen bei den Debug Daten aktivieren.

Die Debug Daten sind wiederum aufgeteilt in einzelne Sektionen.

Fehlermeldungen

Es werden alle Fehlermeldungen der unter "Fehleranzeige konfigurieren" ausgewählten Typen untersucht und verfolgt (In system/logs/error.log werden jedoch sämtliche Ereignisse, auch nicht angewählter Typen, mitprotokolliert, sofern der debugger aktiviert ist).

Ist die Checkbox "Fehlermeldungen und Notices aus dem Core verstecken" aktiviert, so werden viele bekannte Notices und unnötige Meldungen welche aus dem core resultieren und (hoffentlich) ohne negative Auswirkungen sind, nicht in die Debug Ausgabe übernommen.

Den Typ "Notices" (dt. Hinweise) kann man auch noch finetunen, da diese sehr häufig auftreten. Sofern beim finetuning nichts angewählt ist, werden auch keine Notices ausgegeben. Die Beschreibung der Checkboxen des finetunings sollten selbsterklärend sein, weshalb ich sie hier nicht gesondert aufführe.

Hooks verfolgen

Der Debugger ermöglicht es, die Aufrufe von Hooks zu verfolgen.
Hierzu aktiviert man die Checkbox "Hooks verfolgen" und anschliessend beliebig viele Hooks aus der Liste der bekannten Hooks.

Sollten hierbei HOOKs fehlen, so bitte ich um Nachricht, damit ich diese baldmöglichst in den debugger aufnehmen kann.

Den Debugger als Entwickler verwenden

Um einen eigenen Text an den Debugger zu senden, gibt es mehrere so genannte "debug channel".

Diese nennen sich:

  • log - Eine normale Log-Meldung ohne Icon
  • info - eine Meldung mit einem blauen "Info" Icon auf der linken Seite.
  • warn - Eine Warnmeldung.
  • error - Eine Fehlermeldung.

Angesprochen wird der Debugger, wie Contao allgemein, über das globale array $GLOBALS['TL_DEBUG'].

Beispiele:

/*
 * Allgemeine Syntax:
 * if ($GLOBALS['TL_CONFIG']['debugMode'])
 *   $GLOBALS['TL_DEBUG']['CHANNEL']['MESSAGE']=$SOMETHING;
 */

// Loggen einer simplen Message 
// (der channel 'log' ist optional, Meldungen ohne channel landen automatisch im Ziel 'log').
if ($GLOBALS['TL_CONFIG']['debugMode'])
	$GLOBALS['TL_DEBUG']['log']['hello']='world';

// Loggen des aktuellen page Objekts.
global $objPage;
if ($GLOBALS['TL_CONFIG']['debugMode'])
	$GLOBALS['TL_DEBUG']['info']['current page object is']=$objPage;

// Eine Warnung simulieren, welche ebenfalls protokolliert wird.
trigger_error('eine Warnung aus PHP!', E_USER_WARNING);

Bekannte Probleme und sonstiges Wissenswertes

Dem Debugger liegt eine englischsprachige README.txt bei, welche weitergehende Hinweise enthält.

Der Debugger funktioniert erst ab TYPOlight 2.8, da er von der Datei: system/config/initconfig.php abhängig ist.

In diese Datei trägt er sich selbst ein und aus, wenn er aktiviert bzw. deaktiviert wird. Diese Vorgehensweise ist notwendig, da es den frühesten Einsprungspunkt in TYPOlight darstellt. In Zukunft wird evtl. ein HOOK hierfür bereit gestellt, welcher den automatischen Eintrag nicht mehr notwendig macht.