Comment puis-je obtenir PHP pour produire une trace sur les erreurs?
Essayer de débogage PHP à l'aide de son courant par défaut-ligne-seulement les messages d'erreur est horrible. Comment puis-je obtenir PHP pour produire une trace (trace de la pile) lorsque des erreurs se sont produites?
Vous devez vous connecter pour publier un commentaire.
Xdebug imprime une trace de la table sur des erreurs, et vous n'avez pas à écrire le code PHP à mettre en œuvre.
Inconvénient est que vous devez l'installer comme une extension PHP.
sudo apt-get install php5-xdebug && sudo service php5-fpm restart
a bien fonctionné pour moi. Merci!Mon script pour l'installation d'un gestionnaire d'erreurs qui produit un backtrace:
Mise en garde: il est impuissant à affecter divers 'PHP Erreurs Fatales', depuis Zend dans sa sagesse, a décidé que ces reviendrait à ignorer
set_error_handler()
. Si vous obtenez toujours inutile final-emplacement-seulement les erreurs avec ceux-ci.debug_backtrace
ne pas aller au-delà de l'arrêt de la fonction (pile a été sauté déjà), vous pourriez être intéressés de savoir que vous pouvez toujours accéder à l'échelle mondiale portée des variables dans l'arrêt des fonctions. Afin de trouver le ligne de unE_ERROR
qui s'est passé à et de définir une étendue globale variable égal au contenu dedebug_backtrace
sur la ligne précédente. Alto, vous avez un backtrace complet de départ à la ligne avant votre erreur fatale qui est accessible à partir d'unregister_shutdown_function
fonction définie par l' !Erreur PHP
C'est mieux de rapport d'erreur de PHP écrit en PHP. Aucune des extensions supplémentaires sont nécessaires!
C'est facile à utiliser où toutes les erreurs sont affichées dans le navigateur normal, AJAXy des requêtes (en état de pause). Ensuite, toutes les erreurs, vous offre, avec une trace de débogage de code et de contexte à travers l'ensemble de la trace de la pile, y compris les arguments de la fonction, les variables de serveur.
Tout ce que vous devez faire est d'inclure un fichier et l'appel de la fonction (au début de votre code), par exemple
Voir les captures d'écran:
GitHub: https://github.com/JosephLenton/PHP-Error
Ma fourchette (avec supplément fixe): https://github.com/kenorb-contrib/PHP-Error
Debug PHP classe
Un débogueur PHP complet de la classe, avec le soutien d'Exception, des Erreurs, des Alertes ( de l'utilisateur), les lignes de code et de mettre en évidence les drapeaux.
Exemple d'utilisation:
Gestion des erreurs en PHP
L'exemple ci-dessous montre le traitement interne des exceptions par le déclenchement des erreurs et de les manipuler avec une fonction définie par l'utilisateur:
Plus court chemin (en PHP):
Plus long chemin (PHP):
Voir: http://www.php.net/manual/en/function.set-error-handler.php
Remarque: Vous ne pouvez avoir une erreur d'exception à la fois. Lorsque vous appelez la set_error_handler() la fonction retourne le nom de l'ancien gestionnaire d'erreur. Vous pouvez stocker ce et composez vous-même à partir de votre gestionnaire d'erreur – ce qui vous permet d'avoir plusieurs gestionnaires d'erreur.
XDebug
Pour les plus avancés de la solution, vous pouvez utiliser XDebug extension pour PHP.
Par défaut lors de l'extension XDebug est chargé, il doit vous montrer automatiquement la trace en cas d'erreur fatale. Ou vous de trace dans le fichier (l'extension xdebug.auto_trace) pour avoir une grosse trace de l'ensemble de la demande ou de faire du profilage (xdebug.profiler_enable) ou d'autres paramètres. Si le fichier de trace est trop grande, vous pouvez utiliser xdebug_start_trace() et xdebug_stop_trace() pour vider l'partielle de trace.
Installation
À l'aide de PECL:
Sur Linux:
Sur Mac (avec Homebrew):
Exemple de la mine de configuration:
Drupal 6&7
Avec Devel activé:
Ci-dessus fonction de journal la backtraces sur chaque erreur dans le fichier temporaire (
/tmp/drupal_debug.txt
par défaut).Ou recherchez le fichier via:
drush eval "echo file_directory_temp() . '/drupal_debug.txt'
.Sans Devel activé, vous pouvez utiliser la vieille école approche:
var_dump(debug_backtrace());
au lieu dedd()
.var_dump(debug_backtrace());exit;
sur la ligne avant de l'erreur (et d'afficher la source dans votre navigateur web pour une meilleure mise en forme). D'autres outils de débogage pourrait inclurestrace
,dtrace
, etc. Avec le droit d'utilisation, vous pouvez trouver la source du problème.J'ai juste essayé de paramètre une variable de session contenant le contenu de debug_backtrace() à la ligne incriminée, puis de l'imprimer avec register_shutdown_function(). A travaillé comme un charme.
Vous pouvez utiliser debug_backtrace
Php debug extensions, il est Xdebug et PHP DBG. Chacun a ses avantages et ses inconvénients.
C'est comment vous le faites:
Il nécessite PHP 5.3+, car il utilise une fermeture. Si vous avez besoin d'abaisser le support de PHP il suffit de convertir la fermeture pour une fonction normale.
<?= ?>
sont autorisésj'ai écrit un petit article sur backtracing un retour alors que
set_error_handler()
+debug_backtrace()
+debug_print_backtrace()
en PHP5Si vous ne pouvez pas installer un débogueur ensuite utiliser cette fonction sorrounding l'erreur fatale pour obtenir le "fatal de la pile". Vérifiez le code et l'exemple ci-dessous, qui explique mieux comment l'utiliser:
Voici un exemple de comment l'utiliser:
Enfin à lire le contenu du journal...
Espère que ça aide!
PHP DeBugger fait aussi une trace semblable à d'Erreur PHP avec plus d'options.
Si vous le souhaitez, vous pouvez facilement faire votre propre avec
set_error_handler
etdebug_backtrace
Également noter que, pour les internes des piles dans la backtrace certaines touches ne seront pas réglées. Assurez-vous de vérifier si la clé existe pas avant de vous faire quelque chose avec elle si vous avez toutes les erreurs 🙂
E_WARNING
mais pasE_ERROR
de sorte que vous avez à faire quelque chose d'autre pour les erreurs fatalesregister_shutdown_function
n'est pas un mauvais choix.