Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyahpepijat pengecualian yang tidak ditangkap dalam fungsi PHP?

Bagaimana untuk menyahpepijat pengecualian yang tidak ditangkap dalam fungsi PHP?

PHPz
PHPzasal
2024-04-17 11:18:021137semak imbas

Bagaimana untuk nyahpepijat pengecualian yang tidak ditangkap dalam fungsi PHP? Gunakan xdebug.scream: Dayakan pilihan konfigurasi xdebug.scream bagi sambungan xdebug untuk memaparkan skrin biru dan mesej ralat terperinci mengenai pengecualian yang tidak ditangkap. Gunakan register_shutdown_function: Daftar fungsi panggil balik untuk dilaksanakan pada akhir pelaksanaan skrip, dan gunakan fungsi error_get_last() untuk menangkap pengecualian yang tidak ditangkap dan memaparkan maklumatnya.

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

Bagaimana untuk nyahpepijat pengecualian yang tidak ditangkap dalam fungsi PHP?

Pengenalan

Pengecualian yang tidak ditangkap boleh mengganggu pelaksanaan skrip PHP dan menyebabkan ralat dalaman yang sukar untuk dijejaki dan nyahpepijat. Artikel ini akan memperkenalkan dua kaedah untuk menyahpepijat pengecualian tersebut.

Kaedah 1: Menggunakan xdebug.scream

xdebug.scream ialah pilihan konfigurasi sambungan xdebug yang memaparkan skrin biru apabila pengecualian tidak ditangkap berlaku, menunjukkan mesej ralat terperinci dan surih tindanan tentang pengecualian.

Untuk mendayakan xdebug.scream, tambahkan baris berikut pada fail php.ini anda:

[xdebug]
xdebug.scream=1

Nota: Anda perlu memasang dan mendayakan sambungan xdebug untuk menggunakan kaedah ini.

Kaedah 2: Menggunakan register_shutdown_function

register_shutdown_function ialah fungsi PHP yang membolehkan anda melaksanakan fungsi panggil balik pada akhir pelaksanaan skrip. Anda boleh menggunakan fungsi ini untuk menangkap sebarang pengecualian yang tidak ditangkap:

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

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

Contoh praktikal

Katakan anda mempunyai fungsi seperti ini:

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

  return $x / $y;
}

Jika anda tidak menangkap pengecualian yang dilemparkan dalam fungsi bahagi(), ia akan terhasil dalam ralat dalaman berikut :

PHP Fatal error:  Uncaught Exception: Cannot divide by zero

Untuk nyahpepijat isu ini, anda boleh menggunakan salah satu daripada dua kaedah di atas.

Gunakan xdebug.scream:

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

Kemudian panggil fungsi divide():

divide(10, 0);

Gunakan register_shutdown_function:

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

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

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

Kaedah di atas akan membantu anda menangkap dan memaparkan maklumat pengecualian uncaughtdown itu.

Atas ialah kandungan terperinci Bagaimana untuk menyahpepijat pengecualian yang tidak ditangkap dalam fungsi PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn