Nette Documentation Preview

syntax
Erste Schritte mit Tracy
************************

<div class=perex>

Die Tracy-Bibliothek ist ein nützliches Hilfsmittel für PHP-Programmierer. Sie hilft Ihnen dabei:

- Fehler schnell zu erkennen und zu korrigieren
- Fehler zu protokollieren
- Variablen auszulagern
- die Ausführungszeit von Skripten/Abfragen zu messen
- Speicherverbrauch anzeigen

</div>


PHP ist eine perfekte Sprache, um kaum erkennbare Fehler zu machen, weil sie Programmierern große Flexibilität bietet. Tracy\Debugger ist deshalb besonders wertvoll. Er ist ein ultimatives Werkzeug unter den Diagnosewerkzeugen.

Wenn Sie Tracy zum ersten Mal treffen, glauben Sie mir, Ihr Leben wird sich in ein Leben vor Tracy und ein Leben mit ihr aufteilen. Willkommen zum guten Teil!


Installation und Anforderungen .[#toc-installation-and-requirements]
====================================================================

Der beste Weg, Tracy zu installieren, ist, [das neueste Paket herunterzuladen](https://github.com/nette/tracy/releases) oder Composer zu verwenden:

```shell
composer require tracy/tracy
```

Alternativ können Sie auch das gesamte Paket oder die Datei [tracy.phar |https://github.com/nette/tracy/releases] herunterladen.


Verwendung .[#toc-usage]
========================

Tracy wird durch den Aufruf der Methode `Tracy\Debugger::enable()' so früh wie möglich zu Beginn des Programms aktiviert, bevor irgendeine Ausgabe gesendet wird:

```php
use Tracy\Debugger;

require 'vendor/autoload.php'; // alternativ tracy.phar

Debugger::enable();
```

Das erste, was Ihnen auf der Seite auffällt, ist die Tracy-Leiste in der unteren rechten Ecke. Wenn Sie sie nicht sehen, kann das bedeuten, dass Tracy im Produktionsmodus läuft.
Das liegt daran, dass Tracy aus Sicherheitsgründen nur auf localhost sichtbar ist. Um zu testen, ob es funktioniert, können Sie es mit dem Parameter `Debugger::enable(Debugger::Development)` vorübergehend in den Entwicklungsmodus versetzen.


Tracy Bar .[#toc-tracy-bar]
===========================

Die Tracy-Leiste ist ein schwebendes Panel. Sie wird in der rechten unteren Ecke einer Seite angezeigt. Sie können sie mit der Maus verschieben. Sie merkt sich ihre Position nach dem Neuladen der Seite.

[* tracy-bar.webp *]:https://nette.github.io/tracy/tracy-debug-bar.html

Sie können der Tracy Bar weitere nützliche Panels hinzufügen. Sie können interessante in [Addons |https://componette.org] finden oder [Ihre eigenen erstellen |extensions].

Wenn Sie die Tracy Bar nicht anzeigen möchten, setzen Sie:

```php
Debugger::$showBar = false;
```


Visualisierung von Fehlern und Ausnahmen .[#toc-visualization-of-errors-and-exceptions]
=======================================================================================

Sicherlich wissen Sie, wie PHP Fehler meldet: Im Quellcode der Seite steht etwas Ähnliches:

/--pre .{font-size: 90%}
<b>Parse error</b>:  syntax error, unexpected '}' in <b>HomePresenter.php</b> on line <b>15</b>
\--

oder nicht gefangene Ausnahme:

/--pre .{font-size: 90%}
<b>Fatal error</b>:  Uncaught Nette\MemberAccessException: Call to undefined method Nette\Application\UI\Form::addTest()? in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php:100
Stack trace:
#0 /sandbox/vendor/nette/utils/src/Utils/Object.php(75): Nette\Utils\ObjectMixin::call(Object(Nette\Application\UI\Form), 'addTest', Array)
#1 /sandbox/app/Forms/SignFormFactory.php(32): Nette\Object->__call('addTest', Array)
#2 /sandbox/app/UI/Sign/SignPresenter.php(21): App\Forms\SignFormFactory->create()
#3 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(181): App\UI\Sign\SignPresenter->createComponentSignInForm('signInForm')
#4 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(139): Nette\ComponentModel\Container->createComponent('signInForm')
#5 /sandbox/temp/cache/latte/15206b353f351f6bfca2c36cc.php(17): Nette\ComponentModel\Co in <b>/sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php</b> on line <b>100</b><br />
\--

Es ist nicht so einfach, durch diese Ausgabe zu navigieren. Wenn Sie Tracy aktivieren, werden sowohl Fehler als auch Ausnahmen in einer völlig anderen Form angezeigt:

[* tracy-exception.webp .{url:-} *]

Die Fehlermeldungen schreien förmlich. Sie können einen Teil des Quellcodes mit der hervorgehobenen Zeile sehen, in der der Fehler aufgetreten ist. Eine Meldung erklärt den Fehler deutlich. Die gesamte Website ist [interaktiv, versuchen Sie es](https://nette.github.io/tracy/tracy-exception.html).

Und wissen Sie was? Fatale Fehler werden auf die gleiche Weise erfasst und angezeigt. Es ist nicht nötig, eine Erweiterung zu installieren (klicken Sie für ein Live-Beispiel):

[* tracy-error.webp .{url:-} *]

Fehler wie ein Tippfehler in einem Variablennamen oder der Versuch, eine nicht existierende Datei zu öffnen, erzeugen Berichte der Stufe E_NOTICE oder E_WARNING. Diese können leicht übersehen werden und/oder in einem grafischen Layout einer Webseite völlig versteckt sein. Überlassen Sie Tracy die Verwaltung dieser Meldungen:

[* tracy-notice2.webp *]:https://nette.github.io/tracy/tracy-debug-bar.html

Oder sie können wie Fehler angezeigt werden:

```php
Debugger::$strictMode = true; // display all errors
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // all errors except deprecated notices
```

[* tracy-notice.webp .{url:-} *]

Hinweis: Wenn Tracy aktiviert ist, wird die Fehlerberichtsebene auf E_ALL geändert. Wenn Sie dies ändern wollen, tun Sie dies nach dem Aufruf von `enable()`.


Entwicklungs- vs. Produktionsmodus .[#toc-development-vs-production-mode]
=========================================================================

Wie Sie sehen können, ist Tracy recht gesprächig, was in der Entwicklungsumgebung durchaus zu begrüßen ist, während es auf dem Produktionsserver zu einer Katastrophe führen würde. Das liegt daran, dass dort keine Debugging-Informationen angezeigt werden sollten. Tracy verfügt daher über eine **Umgebungserkennung**, und wenn das Beispiel auf einem Live-Server ausgeführt wird, wird der Fehler protokolliert und nicht angezeigt, und der Besucher sieht nur eine benutzerfreundliche Meldung:

[* tracy-error2.webp .{url:-} *]

Der Produktionsmodus unterdrückt die Anzeige aller Debugging-Informationen, die mit [dump() |dumper] gesendet werden, und natürlich auch alle von PHP generierten Fehlermeldungen. Wenn Sie also einige `dump($obj)` im Code vergessen haben, brauchen Sie sich keine Sorgen zu machen, auf dem Produktionsserver wird nichts angezeigt.

Wie funktioniert die automatische Modus-Erkennung? Der Modus ist Entwicklung, wenn die Anwendung auf localhost läuft (d.h. IP-Adresse `127.0.0.1` oder `::1`) und kein Proxy vorhanden ist (d.h. sein HTTP-Header). Andernfalls läuft sie im Produktionsmodus.

Wenn Sie den Entwicklungsmodus in anderen Fällen aktivieren möchten, z. B. für Entwickler, die von einer bestimmten IP-Adresse aus zugreifen, können Sie ihn als Parameter der Methode `enable()` angeben:

```php
Debugger::enable('23.75.345.200'); // Sie können auch eine Reihe von IP-Adressen angeben
```

Wir empfehlen unbedingt, die IP-Adresse mit einem Cookie zu kombinieren. Speichern Sie ein geheimes Token, z.B. `secret1234`, im Cookie `tracy-debug`, und aktivieren Sie auf diese Weise den Entwicklungsmodus nur für Entwickler, die von einer bestimmten IP-Adresse aus zugreifen und das genannte Token im Cookie haben:

```php
Debugger::enable('secret1234@23.75.345.200');
```

Sie können den Entwicklungs-/Produktionsmodus auch direkt mit den Konstanten `Debugger::Development` oder `Debugger::Production` als Parameter der Methode `enable()` einstellen.

.[note]
Wenn Sie das Nette Framework verwenden, sehen Sie sich an, wie Sie [den Modus dafür einstellen |application:bootstrap#Development vs Production Mode], der dann auch für Tracy verwendet wird.


Fehlerprotokollierung .[#toc-error-logging]
===========================================

Im Produktionsmodus protokolliert Tracy automatisch alle Fehler und Ausnahmen in einem Textprotokoll. Damit die Protokollierung erfolgt, müssen Sie den absoluten Pfad zum Protokollverzeichnis in der Variablen `$logDirectory` angeben oder ihn als zweiten Parameter an die Methode `enable()` übergeben:

```php
Debugger::$logDirectory = __DIR__ . '/log';
```

Die Fehlerprotokollierung ist äußerst nützlich. Stellen Sie sich vor, dass alle Benutzer Ihrer Anwendung eigentlich Betatester sind, die kostenlos erstklassige Arbeit bei der Fehlersuche leisten, und Sie wären dumm, ihre wertvollen Berichte unbemerkt in den Mülleimer zu werfen.

Wenn Sie Ihre eigenen Meldungen oder abgefangenen Ausnahmen protokollieren müssen, verwenden Sie die Methode `log()`:

```php
Debugger::log('Unexpected error'); // text message

try {
	criticalOperation();
} catch (Exception $e) {
	Debugger::log($e); // log exception
	// or
	Debugger::log($e, Debugger::ERROR); // also sends an email notification
}
```

If you want Tracy to log PHP errors like `E_NOTICE` or `E_WARNING` with detailed information (HTML report), set `Debugger::$logSeverity`:

```php
Debugger::$logSeverity = E_NOTICE | E_WARNING;
```

Für einen echten Profi ist das Fehlerprotokoll eine wichtige Informationsquelle, und er oder sie möchte über jeden neuen Fehler sofort informiert werden. Tracy hilft ihm dabei. Sie ist in der Lage, für jeden neuen Fehlereintrag eine E-Mail zu versenden. Die Variable $email gibt an, wohin diese E-Mails zu senden sind:

```php
Debugger::$email = 'admin@example.com';
```

Wenn Sie das gesamte Nette Framework verwenden, können Sie diese und andere Einstellungen in der [Konfigurationsdatei |nette:configuring] vornehmen.

Um Ihr E-Mail-Postfach vor Überflutung zu schützen, sendet Tracy **nur eine Nachricht** und erstellt eine Datei `email-sent`. Wenn ein Entwickler die E-Mail-Benachrichtigung erhält, überprüft er das Protokoll, korrigiert seine Anwendung und löscht die Überwachungsdatei `email-sent`. Dadurch wird der E-Mail-Versand wieder aktiviert.


Öffnen von Dateien im Editor .[#toc-opening-files-in-the-editor]
================================================================

Wenn die Fehlerseite angezeigt wird, können Sie auf Dateinamen klicken und sie werden in Ihrem Editor geöffnet, wobei der Cursor auf der entsprechenden Zeile steht. Es können auch Dateien erstellt werden (Aktion `create file`) oder Fehler in ihnen behoben werden (Aktion `fix it`). Hierfür müssen Sie [den Browser und das System konfigurieren |open-files-in-ide].


Unterstützte PHP-Versionen .[#toc-supported-php-versions]
=========================================================

| Tracy ist kompatibel mit PHP
|-----------|--------------------
| Tracy 2.10 – 3.0 | PHP 8.0 – 8.3
| Tracy 2.9 | PHP 7.2 - 8.2
| Tracy 2.8 | PHP 7.2 - 8.1
| Tracy 2.6 - 2.7 | PHP 7.1 - 8.0
| Tracy 2.5 | PHP 5.4 - 7.4
| Tracy 2.4 | PHP 5.4 - 7.2

Gilt für die neuesten Patch-Versionen.


Ports .[#toc-ports]
===================

Dies ist eine Liste von inoffiziellen Portierungen auf andere Frameworks und CMS:

- [Drupal 7](https://www.drupal.org/project/traced)
- Laravel framework: [recca0120/laravel-tracy](https://github.com/recca0120/laravel-tracy), [whipsterCZ/laravel-tracy](https://github.com/whipsterCZ/laravel-tracy)
- [OpenCart](https://github.com/BurdaPraha/oc_tracy)
- [ProcessWire CMS/CMF](https://github.com/adrianbj/TracyDebugger)
- [Slim Framework](https://github.com/runcmf/runtracy)
- Symfony framework: [kutny/tracy-bundle](https://github.com/kutny/tracy-bundle), [VasekPurchart/Tracy-Blue-Screen-Bundle](https://github.com/VasekPurchart/Tracy-Blue-Screen-Bundle)
- [Wordpress](https://github.com/ktstudio/WP-Tracy)

Erste Schritte mit Tracy

Die Tracy-Bibliothek ist ein nützliches Hilfsmittel für PHP-Programmierer. Sie hilft Ihnen dabei:

  • Fehler schnell zu erkennen und zu korrigieren
  • Fehler zu protokollieren
  • Variablen auszulagern
  • die Ausführungszeit von Skripten/Abfragen zu messen
  • Speicherverbrauch anzeigen

PHP ist eine perfekte Sprache, um kaum erkennbare Fehler zu machen, weil sie Programmierern große Flexibilität bietet. Tracy\Debugger ist deshalb besonders wertvoll. Er ist ein ultimatives Werkzeug unter den Diagnosewerkzeugen.

Wenn Sie Tracy zum ersten Mal treffen, glauben Sie mir, Ihr Leben wird sich in ein Leben vor Tracy und ein Leben mit ihr aufteilen. Willkommen zum guten Teil!

Installation und Anforderungen

Der beste Weg, Tracy zu installieren, ist, das neueste Paket herunterzuladen oder Composer zu verwenden:

composer require tracy/tracy

Alternativ können Sie auch das gesamte Paket oder die Datei tracy.phar herunterladen.

Verwendung

Tracy wird durch den Aufruf der Methode `Tracy\Debugger::enable()' so früh wie möglich zu Beginn des Programms aktiviert, bevor irgendeine Ausgabe gesendet wird:

use Tracy\Debugger;

require 'vendor/autoload.php'; // alternativ tracy.phar

Debugger::enable();

Das erste, was Ihnen auf der Seite auffällt, ist die Tracy-Leiste in der unteren rechten Ecke. Wenn Sie sie nicht sehen, kann das bedeuten, dass Tracy im Produktionsmodus läuft. Das liegt daran, dass Tracy aus Sicherheitsgründen nur auf localhost sichtbar ist. Um zu testen, ob es funktioniert, können Sie es mit dem Parameter Debugger::enable(Debugger::Development) vorübergehend in den Entwicklungsmodus versetzen.

Tracy Bar

Die Tracy-Leiste ist ein schwebendes Panel. Sie wird in der rechten unteren Ecke einer Seite angezeigt. Sie können sie mit der Maus verschieben. Sie merkt sich ihre Position nach dem Neuladen der Seite.

Sie können der Tracy Bar weitere nützliche Panels hinzufügen. Sie können interessante in Addons finden oder Ihre eigenen erstellen.

Wenn Sie die Tracy Bar nicht anzeigen möchten, setzen Sie:

Debugger::$showBar = false;

Visualisierung von Fehlern und Ausnahmen

Sicherlich wissen Sie, wie PHP Fehler meldet: Im Quellcode der Seite steht etwas Ähnliches:

Parse error:  syntax error, unexpected '}' in HomePresenter.php on line 15

oder nicht gefangene Ausnahme:

Fatal error:  Uncaught Nette\MemberAccessException: Call to undefined method Nette\Application\UI\Form::addTest()? in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php:100
Stack trace:
#0 /sandbox/vendor/nette/utils/src/Utils/Object.php(75): Nette\Utils\ObjectMixin::call(Object(Nette\Application\UI\Form), 'addTest', Array)
#1 /sandbox/app/Forms/SignFormFactory.php(32): Nette\Object->__call('addTest', Array)
#2 /sandbox/app/UI/Sign/SignPresenter.php(21): App\Forms\SignFormFactory->create()
#3 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(181): App\UI\Sign\SignPresenter->createComponentSignInForm('signInForm')
#4 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(139): Nette\ComponentModel\Container->createComponent('signInForm')
#5 /sandbox/temp/cache/latte/15206b353f351f6bfca2c36cc.php(17): Nette\ComponentModel\Co in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php on line 100

Es ist nicht so einfach, durch diese Ausgabe zu navigieren. Wenn Sie Tracy aktivieren, werden sowohl Fehler als auch Ausnahmen in einer völlig anderen Form angezeigt:

Die Fehlermeldungen schreien förmlich. Sie können einen Teil des Quellcodes mit der hervorgehobenen Zeile sehen, in der der Fehler aufgetreten ist. Eine Meldung erklärt den Fehler deutlich. Die gesamte Website ist interaktiv, versuchen Sie es.

Und wissen Sie was? Fatale Fehler werden auf die gleiche Weise erfasst und angezeigt. Es ist nicht nötig, eine Erweiterung zu installieren (klicken Sie für ein Live-Beispiel):

Fehler wie ein Tippfehler in einem Variablennamen oder der Versuch, eine nicht existierende Datei zu öffnen, erzeugen Berichte der Stufe E_NOTICE oder E_WARNING. Diese können leicht übersehen werden und/oder in einem grafischen Layout einer Webseite völlig versteckt sein. Überlassen Sie Tracy die Verwaltung dieser Meldungen:

Oder sie können wie Fehler angezeigt werden:

Debugger::$strictMode = true; // display all errors
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // all errors except deprecated notices

Hinweis: Wenn Tracy aktiviert ist, wird die Fehlerberichtsebene auf E_ALL geändert. Wenn Sie dies ändern wollen, tun Sie dies nach dem Aufruf von enable().

Entwicklungs- vs. Produktionsmodus

Wie Sie sehen können, ist Tracy recht gesprächig, was in der Entwicklungsumgebung durchaus zu begrüßen ist, während es auf dem Produktionsserver zu einer Katastrophe führen würde. Das liegt daran, dass dort keine Debugging-Informationen angezeigt werden sollten. Tracy verfügt daher über eine Umgebungserkennung, und wenn das Beispiel auf einem Live-Server ausgeführt wird, wird der Fehler protokolliert und nicht angezeigt, und der Besucher sieht nur eine benutzerfreundliche Meldung:

Der Produktionsmodus unterdrückt die Anzeige aller Debugging-Informationen, die mit dump() gesendet werden, und natürlich auch alle von PHP generierten Fehlermeldungen. Wenn Sie also einige dump($obj) im Code vergessen haben, brauchen Sie sich keine Sorgen zu machen, auf dem Produktionsserver wird nichts angezeigt.

Wie funktioniert die automatische Modus-Erkennung? Der Modus ist Entwicklung, wenn die Anwendung auf localhost läuft (d.h. IP-Adresse 127.0.0.1 oder ::1) und kein Proxy vorhanden ist (d.h. sein HTTP-Header). Andernfalls läuft sie im Produktionsmodus.

Wenn Sie den Entwicklungsmodus in anderen Fällen aktivieren möchten, z. B. für Entwickler, die von einer bestimmten IP-Adresse aus zugreifen, können Sie ihn als Parameter der Methode enable() angeben:

Debugger::enable('23.75.345.200'); // Sie können auch eine Reihe von IP-Adressen angeben

Wir empfehlen unbedingt, die IP-Adresse mit einem Cookie zu kombinieren. Speichern Sie ein geheimes Token, z.B. secret1234, im Cookie tracy-debug, und aktivieren Sie auf diese Weise den Entwicklungsmodus nur für Entwickler, die von einer bestimmten IP-Adresse aus zugreifen und das genannte Token im Cookie haben:

Debugger::enable('secret1234@23.75.345.200');

Sie können den Entwicklungs-/Produktionsmodus auch direkt mit den Konstanten Debugger::Development oder Debugger::Production als Parameter der Methode enable() einstellen.

Wenn Sie das Nette Framework verwenden, sehen Sie sich an, wie Sie den Modus dafür einstellen, der dann auch für Tracy verwendet wird.

Fehlerprotokollierung

Im Produktionsmodus protokolliert Tracy automatisch alle Fehler und Ausnahmen in einem Textprotokoll. Damit die Protokollierung erfolgt, müssen Sie den absoluten Pfad zum Protokollverzeichnis in der Variablen $logDirectory angeben oder ihn als zweiten Parameter an die Methode enable() übergeben:

Debugger::$logDirectory = __DIR__ . '/log';

Die Fehlerprotokollierung ist äußerst nützlich. Stellen Sie sich vor, dass alle Benutzer Ihrer Anwendung eigentlich Betatester sind, die kostenlos erstklassige Arbeit bei der Fehlersuche leisten, und Sie wären dumm, ihre wertvollen Berichte unbemerkt in den Mülleimer zu werfen.

Wenn Sie Ihre eigenen Meldungen oder abgefangenen Ausnahmen protokollieren müssen, verwenden Sie die Methode log():

Debugger::log('Unexpected error'); // text message

try {
	criticalOperation();
} catch (Exception $e) {
	Debugger::log($e); // log exception
	// or
	Debugger::log($e, Debugger::ERROR); // also sends an email notification
}

If you want Tracy to log PHP errors like E_NOTICE or E_WARNING with detailed information (HTML report), set Debugger::$logSeverity:

Debugger::$logSeverity = E_NOTICE | E_WARNING;

Für einen echten Profi ist das Fehlerprotokoll eine wichtige Informationsquelle, und er oder sie möchte über jeden neuen Fehler sofort informiert werden. Tracy hilft ihm dabei. Sie ist in der Lage, für jeden neuen Fehlereintrag eine E-Mail zu versenden. Die Variable $email gibt an, wohin diese E-Mails zu senden sind:

Debugger::$email = 'admin@example.com';

Wenn Sie das gesamte Nette Framework verwenden, können Sie diese und andere Einstellungen in der Konfigurationsdatei vornehmen.

Um Ihr E-Mail-Postfach vor Überflutung zu schützen, sendet Tracy nur eine Nachricht und erstellt eine Datei email-sent. Wenn ein Entwickler die E-Mail-Benachrichtigung erhält, überprüft er das Protokoll, korrigiert seine Anwendung und löscht die Überwachungsdatei email-sent. Dadurch wird der E-Mail-Versand wieder aktiviert.

Öffnen von Dateien im Editor

Wenn die Fehlerseite angezeigt wird, können Sie auf Dateinamen klicken und sie werden in Ihrem Editor geöffnet, wobei der Cursor auf der entsprechenden Zeile steht. Es können auch Dateien erstellt werden (Aktion create file) oder Fehler in ihnen behoben werden (Aktion fix it). Hierfür müssen Sie den Browser und das System konfigurieren.

Unterstützte PHP-Versionen

Tracy ist kompatibel mit PHP
Tracy 2.10 – 3.0 PHP 8.0 – 8.3
Tracy 2.9 PHP 7.2 – 8.2
Tracy 2.8 PHP 7.2 – 8.1
Tracy 2.6 – 2.7 PHP 7.1 – 8.0
Tracy 2.5 PHP 5.4 – 7.4
Tracy 2.4 PHP 5.4 – 7.2

Gilt für die neuesten Patch-Versionen.

Ports

Dies ist eine Liste von inoffiziellen Portierungen auf andere Frameworks und CMS: