Bagaimana untuk menyahpepijat pengecualian yang tidak ditangkap dalam fungsi PHP?

PHPz
Lepaskan: 2024-04-17 11:18:02
asal
1188 orang telah melayarinya

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
Salin selepas log masuk

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']}";
  }
});
Salin selepas log masuk

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;
}
Salin selepas log masuk

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
Salin selepas log masuk

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

Gunakan xdebug.scream:

// 启用 xdebug.scream
Salin selepas log masuk
xdebug.scream=1
Salin selepas log masuk

Kemudian panggil fungsi divide():

divide(10, 0);
Salin selepas log masuk

Gunakan register_shutdown_function:

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

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

// 调用 divide() 函数
divide(10, 0);
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan