Есть ли какая-либо функция трассировки стека во время работы PHP, с помощью данного PID? (Для кого тоже писать Java, я имею в виду jstack.)
У меня появилось несколько фоновых процессов PHP, которые они иногда замерзают на некоторых неизвестных строках. Я могу просто убить их всех и перезапустить, но это не помешает повторению этого.
Есть ли API, способный шпионить за стеком и рассказывать? как утилита jstack, предоставляемая JDK?
У вас есть несколько вариантов с точки зрения отладки неизвестных ошибок.
--enable-debug
. Xdebug
Используйте gdb
для запуска файла, который разбивается и анализирует обратную трассировку.
--enable-debug
, Linux-машины с Apache
и сильным желанием / способностью понять, как программное обеспечение работает на более низком уровне. gdb
с Apache
: gdb /usr/lib/httpd
(gdb) run -X
gdb
: (gdb) backtrace
gdb
для запуска самого скрипта: (gdb) run /path/to/the/script.php
(gdb) backtrace
gdb
ознакомьтесь с руководством по быстрой ссылке .
Создайте собственный обработчик ошибок, который печатает трассировку стека при ошибке.
require('ErrorHandler.php');
в верхней части страницы, и она должна автоматически регистрироваться для обработки любых ошибок. Обязательно обновите include-path, чтобы указать на фактический файл, конечно. 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')); ?>