So generieren Sie einen Stack-Trace bei Fehlern

20

Ich bin ein Systemadministrator, der versucht, eine Drupal-Site zu debuggen. In meinen Server-Logs kann ich sehen, dass Drupal immer wieder dieselben Anfragen an unsere Solr-Instanz stellt, bis PHP irgendwann keinen Speicher mehr hat und Apache einen 500-Fehler zurückgibt.

Wie kann ich Drupal so konfigurieren, dass irgendwo auf der Festplatte ein Stack-Trace protokolliert wird?

Max
quelle

Antworten:

15

Sie können das Entwicklungsmodul verwenden und eine der "Krumo Backtrace" -Optionen auf der Konfigurationsseite unter admin / config / development / devel auswählen.

Krumo Backtrace

Stellen Sie sicher, dass Sie admin / config / development / logging besuchen und "Errors and Warnings" oder "All Messages" auswählen. Wenn Sie das Syslog-Modul oder ein anderes Protokollierungsmodul aktiviert haben, müssen Sie es möglicherweise deaktivieren und das Dblog-Modul aktivieren.

backtrace config

Amateur Barista
quelle
6
Ich finde, dass diese Methode den Krumo-Backtrace für bestimmte Ausnahmen nicht liefert, z. B. für den Zugriff auf eine nicht vorhandene Eigenschaft eines EntityMetadataWrapperObjekts.
Artfulrobot
3
Bei EntityMetadataWrapper-Fehlern gehen Sie in die Zeile des gemeldeten Fehlers und fügen Sie sie ddebug_backtrace();direkt vor dieser Zeile ein. Vergessen Sie nicht, das natürlich zu entfernen!
Duncanmoo
Werden diese Nachrichten irgendwo protokolliert oder ist es möglich, sie in ein Protokoll aufzunehmen? Ansonsten ist es für die Produktion nutzlos.
Hjulle
1

In Ihrem Drupal-System finden Sie im Abschnitt Module unter Kernmodule das Syslog-Modul zum Speichern des Protokolls auf der Festplatte. hoffe es hilft was ihr sucht.

Samir Mankar
quelle
1
Dies funktioniert leider nicht bei schwerwiegenden Fehlern (z. B. Speichermangel).
Stefgosselin
0

Für Drupal 7 und 8 das Modul eignet sich inspect hervorragend für Backtraces.

Es kann sie zu Dateien oder zum Protokoll in der Drupal-Datenbank hinzufügen, anstatt sie anzuzeigen. Dies ist in Fällen hilfreich, in denen Krumo ddebug_backtrace() und andere Lösungen, die eine direkte Bildschirmausgabe erstellen, fehlschlagen. Dies ist der Fall bei Fehlern und Ausnahmen, die auftreten, bevor die Ausgabe gestartet wird.

Der Konfigurationsbereich des Admin-Backends für inspect enthält eine schöne Kurzreferenz für die Verwendung im Code.

Tanius
quelle
2
Ich habe mich in den inspectDokumenten umgesehen, aber ich habe keine Möglichkeit gefunden, damit bei einem Fehler einen Stack-Trace zu generieren. Ist das etwas, was es tun kann?
Ken Williams
0

Die Spur Modul hat in meiner Situation viel besser funktioniert.

Dies ist ein Sysadmin- und Entwicklertool, das umfangreiche Nachverfolgungsfunktionen für Drupal-Hook-Aufrufe, Datenbankabfragen und PHP-Fehler hinzufügt.

Einige Funktionen, die von Version 1.0 dieses Moduls bereitgestellt werden:

  • Gibt Trace-Meldungen in eine Datei oder in das Syslog aus (auf Unix-Plattformen).
  • Verfolgt Drupal-Hook-Aufrufe mit einem optionalen Filter und Stack-Trace.
  • Verfolgt PHP-Warnungen und -Fehler mit einem optionalen vollständigen Stack-Trace.
  • Verfolgt SQL-Datenbankabfragen mit optionaler Filterung nach Abfragetyp.
  • Die Trace-Ausgabe enthält Timing-Informationen auf Mikrosekunden-Ebene.
  • Stack-Traces enthalten die übergebenen Argumente der Funktion in der PHP-Syntax.
  • Die optionale Debug-Ausgabe enthält PHP-Superglobale und HTTP-Header.
  • Definiert einen Hook, mit dem andere Module die Trace-Ausgabeziele erweitern können.
Deweydb
quelle
1
Dieses Modul befindet sich
derzeit