2013-07-15 2 views
0

Проблема в том, что скрипт зависает через некоторое время. Трассирование возвращает что-то вроде этого, и ничто другое:Как вы отлаживаете PHP-скрипт LONG RUNNING?

Process 7286 attached - interrupt to quit 
restart_syscall(<... resuming interrupted call ...>) = 0 
poll([{fd=13, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) 
clock_gettime(CLOCK_MONOTONIC, {1817569, 74651533}) = 0 
clock_gettime(CLOCK_MONOTONIC, {1817569, 74734744}) = 0 
clock_gettime(CLOCK_MONOTONIC, {1817569, 74812047}) = 0 
poll([{fd=13, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout) 
poll([{fd=13, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout) 
.... 

Ввод here'n'there отладочных сообщений осталось в крайнем случае ..

я могу запустить скрипт с Xdebug прикрепленного но есть ли способ отправить некоторый сигнал POSIX в процесс php, который приведет к тому, что xdebug выкинет текущий контекст/stacktrace/localvars?

Можно ли получить «postmortem dump» php script?

+0

, что сигналы о вашем Говоря о, вероятно, является исключение – DevZer0

+0

не исключение, но сигнал POSIX по _kill_ отправляется процесс PHP и поймано Xdebug. Если что-то подобное существует, это было бы прекрасно. – xvga

+0

Да, вы можете использовать [pcntl_signal] (http://php.net/manual/en/function.pcntl-signal.php) правильно обрабатывать сигналы posix, а затем выбрасывать хорошее исключение –

ответ

1

У Xdebug нет функциональности. Использование pcntl_signal, а затем использование xdebug_print_function_stack - это опция, но то, что вы также можете сделать, - это создать «функциональную трассировку». Это то, что заставляет Xdebug записывать каждый вызов функции на диск, как только они происходят. Это должно быть в состоянии сказать вам, где висит ваш скрипт. Из того, что я вижу, это то, что ждет ИО.

Существует более подробная информация о функциональных следах на http://www.xdebug.org/docs/execution_trace

+0

спасибо! Хотя это слишком много для дела, но это определенно поможет. – xvga