Comment générer une trace de pile en cas d'erreur

20

Je suis administrateur système essayant de déboguer un site Drupal. Dans mes journaux de serveur, je peux voir Drupal faire les mêmes demandes encore et encore à notre instance Solr jusqu'à ce que PHP finisse par manquer de mémoire, et Apache renvoie une erreur 500.

Comment puis-je configurer Drupal pour enregistrer une trace de pile quelque part sur le disque?

Max
la source

Réponses:

15

Vous pouvez utiliser le module Devel et sélectionner l'une des options "Krumo Backtrace" qu'il fournit dans sa page de configuration à admin / config / development / devel.

Krumo Backtrace

Assurez-vous de visiter admin / config / development / logging et sélectionnez "Erreurs et avertissements" ou "Tous les messages". Si vous avez le module Syslog ou tout autre module de journalisation activé, vous devrez peut-être le désactiver et activer le module Dblog.

configuration de backtrace

barista amateur
la source
6
Je trouve que cette méthode ne parvient pas à donner la trace de krumo pour certaines exceptions, par exemple l'accès à une propriété inexistante sur un EntityMetadataWrapperobjet.
artfulrobot
3
Pour les erreurs EntityMetadataWrapper, accédez à la ligne de l'erreur signalée et insérez-la ddebug_backtrace();juste avant cette ligne. N'oubliez pas de supprimer cela bien sûr!
Duncanmoo
Ces messages sont-ils enregistrés quelque part ou est-il possible de les faire entrer dans un journal? Sinon, c'est un peu inutile en production.
Hjulle
1

dans votre système drupal dans la section des modules sous les modules de base, c'est leur module syslog pour stocker le journal sur le disque. J'espère que cela aidera ce que vous recherchez.

samir mankar
la source
1
Cela ne fonctionne pas sur les erreurs fatales (telles que les erreurs de mémoire insuffisante), malheureusement.
stefgosselin
0

Pour Drupal 7 et 8, l' inspection du module est idéale pour les backtraces.

Il peut les ajouter aux fichiers ou au journal de la base de données Drupal plutôt que de les afficher, ce qui est utile dans les cas où Krumo backtrace ddebug_backtrace()et d'autres solutions qui créent une sortie directe à l'écran échouent. C'est le cas pour les erreurs et les exceptions qui se produisent avant le début de la sortie du rendu.

La zone de configuration du backend d'administration pour inspect contient une bonne référence rapide pour son utilisation dans le code.

tanius
la source
2
J'ai fouillé dans les inspectdocuments, mais je n'ai pas vu un moyen de l'utiliser pour générer une trace de pile en cas d'erreur. Est-ce quelque chose qu'il peut faire?
Ken Williams
0

Le module Trace fonctionnait beaucoup mieux pour ma situation.

Il s'agit d'un outil administrateur système et développeur qui ajoute des fonctionnalités de traçage étendues pour les appels de hook Drupal, les requêtes de base de données et les erreurs PHP.

Certaines fonctionnalités fournies par la version 1.0 de ce module:

  • Affiche les messages de trace dans un fichier ou le syslog (sur les plates-formes Unix).
  • Trace les appels de hook Drupal avec un filtre facultatif et une trace de pile.
  • Trace les avertissements et les erreurs PHP avec une trace de pile complète facultative.
  • Trace les requêtes de base de données SQL avec filtrage facultatif par type de requête.
  • La sortie de trace comprend des informations de synchronisation de niveau microseconde.
  • Les traces de pile incluent les arguments passés de la fonction dans la syntaxe PHP.
  • La sortie de débogage facultative comprend les superglobaux PHP et les en-têtes HTTP.
  • Définit un hook permettant aux autres modules d'étendre les cibles de sortie de trace.
deweydb
la source
1
Maintenant ce module n'est plus en développement et apparemment aucune version D7 n'est disponible… :(
tanius