2013-07-15 5 views
0

문제는 오랜 시간이 지나면 스크립트가 중단된다는 것입니다. 이것과 다른 아무것도 같은 strace를 반환 뭔가 : 나는 부착 Xdebug는으로 스크립트를 실행할 수 있습니다어떻게 오래 실행 PHP 스크립트를 디버깅합니까?

here'n'there 디버그 메시지를 퍼팅

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) 
.... 

는 최후의 수단으로 남겨 ..하지만 거기에 현재 컨텍스트/stacktrace/localvars 덤프 xdebug 트리거하는 PHP 프로세스에 일부 POSIX 신호를 보낼 수있는 방법은 무엇입니까?

PHP 스크립트의 '사후 덤프'를 가져올 수 있습니까?

+0

에서 기능 추적에 대한 자세한 정보가

아마 Xdebug는에 의해 PHP 프로세스로 전송 잡은 _kill_에 의해 예외 – DevZer0

+0

하지 예외지만, POSIX 신호입니다. 존재하는 것과 같은 것이 있다면 그것은 완벽 할 것입니다. – xvga

+0

예, [pcntl_signal] (http://php.net/manual/en/function.pcntl-signal.php)을 사용하여 posix 신호를 올바르게 처리 한 다음 좋은 예외를 던질 수 있습니다. –

답변

1

Xdebug에는 이에 대한 기능이 없습니다. pcntl_signal을 사용한 다음 xdebug_print_function_stack을 사용하는 것도 옵션이지만 "함수 추적"을 만드는 것도 할 수 있습니다. 이것은 Xdebug가 모든 함수 호출을 발생하자마자 디스크에 기록하게하는 것입니다. 이렇게하면 스크립트가 멈추는 위치를 알려줄 수 있습니다. 내가 볼 수있는 것은 IO가 기다리고 있다는 것입니다. 이제 당신의 말하기 신호 http://www.xdebug.org/docs/execution_trace

+0

감사합니다! 비록 그것이 사건에 너무 많은 것이지만 그것은 분명히 도움이 될 것입니다. – xvga