코드 조각이 전체 호출 체인을 볼 수 없는 경우 전체 호출 체인을 명확하게 쿼리하는 데 도움이 되는 도구가 필요합니까? 이번에는 편집기를 통해 PHP의 Deliverer에 대해 배울 수 있으므로 더 이상 코드 문제 해결에 대해 걱정할 필요가 없습니다.
몇일 전 그룹 친구가 조상 코드 조각을 인수했는데, 오랫동안 문제를 해결하지 못해서 물통을 들고 도망가서 마침내 문제를 해결하게 되었습니다. 전체 프로세스는 https://mengkang.net/1470.html에서 찾을 수 있습니다. 그러나 결국에는 개인적인 경험을 바탕으로 코드 위치를 지정했습니다. 호출된 실제 링크는 모두 제가 예상한 것과 다릅니다. . 전체 호출 체인을 볼 수 없었기 때문에 전체 호출 체인을 명시적으로 쿼리하는 데 도움이 되는 도구가 필요하다고 생각했습니다.
그래서 저는 주로 일상 환경에서 재현하기 어려운 익숙하지 않은 프로젝트와 온라인 시나리오를 위해 이 도구를 만들었습니다.
deliver 조상 코드의 구원자 탈출 https://github.com/zhoumengka...
프로젝트가 그다지 나쁘지 않고 일상 환경도 괜찮다면 프로젝트에 익숙해지는 가장 좋은 방법은 xdebug입니다. 이 도구는 주로 온라인 문제를 해결하는 것입니다.
유사한 도구에는 360의 phptrace 구현 원리가 포함되어 있지만 약간 다릅니다
함수 이름, 클래스 이름, 메서드 이름, 경로를 기준으로 출력을 필터링할 수 있습니다
지정된 필터를 쿼리할 수 있습니다 content n번 후에 종료
요청 ID를 기반으로 전체 콜 체인을 재생할 수 있습니다
필터링된 콘텐츠가 강조 표시됩니다
콜 스택이 깊은 경우 -l을 지정하여 숨길 수 있습니다 딥 콜 표시
사실 비교적 간단합니다. 첫 번째 단계는 로그를 수집하는 단계이고 두 번째 단계는 로그를 분석하는 단계입니다.
PHP_MINIT 단계에서 zend_set_user_opcode_handler를 사용하여 ZEND_DO_UCALL, ZEND_DO_FCALL_BY_NAME 및 ZEND_DO_FCALL의 세 가지 유형의 opcode 처리 및 분석을 설정합니다.
일부 내장 함수 및 메소드에 대한 호출을 다루며 유형별로 필터링할 수 있습니다.
그런 다음 PHP_RINIT 단계에서 새 로그 파일을 생성하고 요청된 정보를 작성합니다
pid-ts sapi http_method http_url
요청 프로세스 중에 사용자 정의 핸들러에서 호출 스택 정보를 인쇄합니다
마지막으로 PHP_RSHUTDOWN에서 로그 파일 작성을 닫습니다
bin/deliverer를 사용하여 수집된 로그를 분석하고 정리합니다. 이는 PHP 스크립트이므로 자세히 설명하지 않겠습니다.
$ phpize $ ./configure --with-php-config=/usr/local/php/bin/php-config $ make && sudo make install
Append
[deliverer] extension=deliverer.so
sudo service php-fpm restart
./bin/deliverer 이동 가능 적합하다고 생각하는 디렉토리, 오래전부터 내 조상 코드(내 블로그)를 사용하여 현재 디렉토리에서 실행하는 경우
$ chmod +x deliverer
$ ./bin/deliverer -t
이것은 항상 모든 PHP 프로세스의 실행을 모니터링합니다.
$ ./bin/deliverer -tAction::initUser -n3 -l5
Parameters | Value | Explanation |
---|---|---|
-t | 작업::init User | 이 통화가 포함된 요청을 필터링하세요 |
-n | 3 | 3번 세고 종료 |
-l | 5 | 함수(메소드) 호출 심도 표시, 최대 5레이어까지 표시, 초과된 부분은 마지막에 표시 |
$ ./bin/deliverer -v7979-1624369150991941
사용 -v requestId 전체 호출 스택을 자세히 보려면
$ ./bin/deliverer -tSqlExecute::getAll -n1 -l3
메서드를 쿼리할 때 함수 호출 스택이 너무 깊어 계층 쿼리 범위 내에 있지 않으며 외부 호출이 빨간색으로 표시됩니다
추천 학습: php 비디오 튜토리얼
위 내용은 오랫동안 기다려온 PHP 코드 구원자 Deliverer가 왔습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!