ホームページ  >  記事  >  バックエンド開発  >  PHP 関数でキャッチされなかった例外をデバッグするにはどうすればよいですか?

PHP 関数でキャッチされなかった例外をデバッグするにはどうすればよいですか?

PHPz
PHPzオリジナル
2024-04-17 11:18:021136ブラウズ

PHP 関数でキャッチされなかった例外をデバッグするにはどうすればよいですか? xdebug.scream を使用する: xdebug 拡張機能の xdebug.scream 構成オプションを有効にして、キャッチされなかった例外に関するブルー スクリーンと詳細なエラー メッセージを表示します。 register_shutdown_function を使用する: スクリプト実行の最後に実行されるコールバック関数を登録し、error_get_last() 関数を使用してキャッチされなかった例外をキャッチし、その情報を表示します。

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

#PHP 関数でキャッチされなかった例外をデバッグするにはどうすればよいですか?

はじめに

キャッチされない例外により、PHP スクリプトの実行が中断され、追跡とデバッグが困難な内部エラーが発生する可能性があります。この記事では、このような例外をデバッグする 2 つの方法を紹介します。

方法 1: xdebug.scream を使用する

xdebug.scream は、キャッチされない例外が発生したときにブルー スクリーンを表示し、詳細なエラー メッセージを表示する xdebug 拡張構成オプションです。そして例外に関するスタックトレース。

xdebug.scream を有効にするには、php.ini ファイルに次の行を追加します。

[xdebug]
xdebug.scream=1

注: この方法を使用するには、xdebug 拡張機能をインストールして有効にする必要があります。

方法 2: register_shutdown_function を使用する

register_shutdown_function は、スクリプト実行の最後にコールバック関数を実行できるようにする PHP 関数です。この関数を使用すると、キャッチされなかった例外をキャッチできます:

register_shutdown_function(function() {
  // 获取未捕获的异常对象
  $error = error_get_last();

  if ($error) {
    // 显示异常信息
    echo "Uncaught Exception: {$error['message']}";
    echo "Stack trace: {$error['stacktrace']}";
  }
});

実用的なケース

次の関数があるとします:

function divide($x, $y)
{
  if ($y == 0) {
    throw new Exception('Cannot divide by zero');
  }

  return $x / $y;
}

If you don't' t Division() 関数でスローされた例外をキャッチします。これにより、次の内部エラーが発生します:

PHP Fatal error:  Uncaught Exception: Cannot divide by zero

この問題をデバッグするには、上記の 2 つの方法のいずれかを使用できます。

xdebug.scream を使用します:

// 启用 xdebug.scream
xdebug.scream=1

次に、divide() 関数を呼び出します:

divide(10, 0);

register_shutdown_function を使用します:

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

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

// 调用 divide() 函数
divide(10, 0);

上記の方法は、キャプチャに役立ちます。キャッチされなかった例外に関する情報を表示して、例外をデバッグできるようにします。

以上がPHP 関数でキャッチされなかった例外をデバッグするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。