Comment déboguer les exceptions non interceptées dans les fonctions PHP ? Utilisez xdebug.scream : activez l'option de configuration xdebug.scream de l'extension xdebug pour afficher un écran bleu et un message d'erreur détaillé sur les exceptions non interceptées. Utilisez register_shutdown_function : enregistrez une fonction de rappel à exécuter à la fin de l'exécution du script et utilisez la fonction error_get_last() pour intercepter les exceptions non interceptées et afficher leurs informations.
Comment déboguer les exceptions non interceptées dans les fonctions PHP ?
Introduction
Les exceptions non détectées peuvent interrompre l'exécution des scripts PHP et provoquer des erreurs internes difficiles à suivre et à déboguer. Cet article présentera deux méthodes pour déboguer de telles exceptions.
Méthode 1 : Utilisation de xdebug.scream
xdebug.scream est une option de configuration de l'extension xdebug qui affiche un écran bleu lorsqu'une exception non interceptée se produit, affichant un message d'erreur détaillé et une trace de pile concernant l'exception.
Pour activer xdebug.scream, ajoutez la ligne suivante à votre fichier php.ini :
[xdebug] xdebug.scream=1
Remarque : vous devez installer et activer l'extension xdebug pour utiliser cette méthode.
Méthode 2 : Utilisation de register_shutdown_function
register_shutdown_function est une fonction PHP qui permet d'exécuter une fonction de rappel à la fin de l'exécution du script. Vous pouvez utiliser cette fonction pour intercepter toute exception non interceptée :
register_shutdown_function(function() { // 获取未捕获的异常对象 $error = error_get_last(); if ($error) { // 显示异常信息 echo "Uncaught Exception: {$error['message']}"; echo "Stack trace: {$error['stacktrace']}"; } });
Exemple pratique
Supposons que vous ayez une fonction comme celle-ci :
function divide($x, $y) { if ($y == 0) { throw new Exception('Cannot divide by zero'); } return $x / $y; }
Si vous n'attrapez pas l'exception lancée dans la fonction Divide(), cela entraînera dans l'erreur interne suivante :
PHP Fatal error: Uncaught Exception: Cannot divide by zero
Pour déboguer ce problème, vous pouvez utiliser l'une des deux méthodes ci-dessus.
Utilisez xdebug.scream :
// 启用 xdebug.scream
xdebug.scream=1
Ensuite, appelez la fonction Divide() :
divide(10, 0);
Utilisez register_shutdown_function :
register_shutdown_function(function() { $error = error_get_last(); if ($error) { echo $error['message'] . "\n" . $error['stacktrace']; } }); // 调用 divide() 函数 divide(10, 0);
La méthode ci-dessus vous aidera à capturer et à afficher les informations de l'exception non capturée afin que vous puissiez la déboguer.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!