如何調試 php 函數中未捕獲的異常?使用 xdebug.scream:啟用 xdebug 擴展的 xdebug.scream 配置選項,未捕獲的異常時會顯示藍色屏幕和詳細錯誤信息。使用 register_shutdown_function:注冊一個回調函數在腳本執行結束時執行,并使用 error_get_last() 函數捕獲未捕獲的異常并顯示其信息。
如何調試 PHP 函數中未捕獲的異常?
簡介
未捕獲的異常會中斷 PHP 腳本的執行,并導致內部錯誤,難以追蹤和調試。本文將介紹兩種方法來調試此類異常。
方法 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;
}
登錄后復制
如果你不捕獲 divide() 函數中引發的異常,它將導致以下內部錯誤:
PHP Fatal error: Uncaught Exception: Cannot divide by zero
登錄后復制
要調試此問題,你可以使用上述兩種方法之一。
使用 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);
登錄后復制
以上方法將幫助你捕獲并顯示未捕獲的異常的信息,以便對其進行調試。






