Maison >développement back-end >tutoriel php >Comment déboguer les exceptions non interceptées dans les fonctions PHP ?

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

PHPz
PHPzoriginal
2024-04-17 11:18:021217parcourir

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

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!

Déclaration:
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