2
PHP中是否有任何運行時堆棧跟蹤功能? (爲誰也寫Java,我的意思是jstack。)打印PHP在PHP外部運行調用堆棧
我有幾個PHP後臺進程,他們凍結了一段時間,在一些未知的行。我可以簡單地殺死它們並重新啓動,但不會阻止它再次發生。
是否有API能夠窺探堆棧並告訴?像JDK提供的jstack實用程序一樣?
PHP中是否有任何運行時堆棧跟蹤功能? (爲誰也寫Java,我的意思是jstack。)打印PHP在PHP外部運行調用堆棧
我有幾個PHP後臺進程,他們凍結了一段時間,在一些未知的行。我可以簡單地殺死它們並重新啓動,但不會阻止它再次發生。
是否有API能夠窺探堆棧並告訴?像JDK提供的jstack實用程序一樣?
您在調試未知錯誤方面有幾個選項。
--enable-debug
。使用gdb
來運行崩潰的文件和分析回溯。
--enable-debug
配置的中級到高級的方法,需要PHP,運行Apache
一臺Linux機器,和強烈的願望/理解能力的軟件工作在一個較低級的方式。gdb
與Apache
:gdb /usr/lib/httpd
(gdb) run -X
gdb
: (gdb) backtrace
gdb
運行該腳本本身:(gdb) run /path/to/the/script.php
(gdb) backtrace
gdb
信息,請查看quick-reference guide。 創建custom error handler時拋出一個錯誤,打印堆棧跟蹤。
require('ErrorHandler.php');
添加到您的頁面頂部,它應該自動註冊自己來處理任何錯誤。當然,確保將包含路徑更新爲指向實際文件。ErrorHandler.php:
<?php
class ErrorHandler {
public static function captureError($err_no, $message, $file, $line) {
echo '<strong>Error (#' . $err_no . '):</strong> ' . $message . ' in ' . $file . ' on line #' . $line . '<br />';
debug_print_backtrace();
}
public static function captureException($exception) {
echo '<pre>' . print_r($exception, true) . '</pre>';
}
public static function captureShutdown() {
if (($error = error_get_last()) !== null) {
debug_print_backtrace();
}
}
}
set_error_handler(array('ErrorHandler', 'captureError'));
set_exception_handler(array('ErrorHandler', 'captureException'));
register_shutdown_function(array('ErrorHandler', 'captureShutdown'));
?>