Comment déboguer les exceptions non interceptées dans les fonctions PHP ?

PHPz
Libérer: 2024-04-17 11:18:02
original
1188 Les gens l'ont consulté

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.

如何调试 PHP 函数中未捕获的异常?

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
Copier après la connexion

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']}";
  }
});
Copier après la connexion

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;
}
Copier après la connexion

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
Copier après la connexion

Pour déboguer ce problème, vous pouvez utiliser l'une des deux méthodes ci-dessus.

Utilisez xdebug.scream :

// 启用 xdebug.scream
Copier après la connexion
xdebug.scream=1
Copier après la connexion

Ensuite, appelez la fonction Divide() :

divide(10, 0);
Copier après la connexion

Utilisez register_shutdown_function :

register_shutdown_function(function() {
  $error = error_get_last();

  if ($error) {
    echo $error['message'] . "\n" . $error['stacktrace'];
  }
});

// 调用 divide() 函数
divide(10, 0);
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal