온라인에 PHP 스크립트가 있는데 어느 날 갑자기 문제가 발생하여 처리되지 않지만 프로세스가 종료되지 않는다고 가정해 보겠습니다. 이러한 상황은 비정상적인 수면이나 코드의 무한 루프로 인해 발생할 수 있지만 이를 어떻게 찾을 수 있습니까? 이때 가장 알고 싶은 것은 이 스크립트가 지금 무엇을 하고 있는지입니다. 이는 gdb+zbacktrace를 사용하는 경우 유용합니다.
먼저 테스트 스크립트 test.php를 작성하고 거기에 수면 함수를 작성하면 무한 루프로 변경할 수도 있습니다.
<?phpfunction Mecho($i){ echo $i.PHP_EOL; }$i = 20;while($i>0){if($i%2==0){ Mecho($i); }sleep(100000);$i--; }
zbacktrace는 다운로드한 PHP 소스 코드 패키지에 포함되어 있습니다. 현재 환경이 새로 설치되었으며 현재 PHP 버전은 php7.2.9입니다.
test.php를 실행하는 직접 cli
php test.php
그런 다음 현재 PHP 프로세스를 찾으세요
그런 다음 gdb를 사용하여 디버깅
gdb -p 56571
Debug
source /usr/local/src/php-7.2.9/.gdbinit zbacktrace
이때 프로세스 sleep이 test.php의 11번째 줄에 있는 sleep 함수에 의해 발생한다는 것을 알 수 있습니다.
관련 튜토리얼: PHP 비디오 튜토리얼
위 내용은 Gdb 디버깅 PHP는 현재 실행 중인 코드를 쉽게 찾습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!