Wenn ein Code die gesamte Aufrufkette nicht sehen kann, benötigen Sie dann ein Tool, das Sie bei der eindeutigen Abfrage der gesamten kompletten Aufrufkette unterstützt? Dieses Mal führt Sie der Editor dazu, mehr über Deliverer in PHP zu erfahren, sodass Sie sich nicht mehr um die Fehlerbehebung im Code kümmern müssen.
Vor ein paar Tagen übernahm ein Gruppenfreund einen Teil des Ahnencodes. Nach langer Fehlerbehebung war er nicht bereit, mit dem Eimer davonzulaufen und ihm schließlich zu helfen Den vollständigen Prozess finden Sie unter https://mengkang.net/1470.html. Letztendlich habe ich jedoch eine gewisse Positionierung des Codes basierend auf persönlicher Erfahrung. Der tatsächlich aufgerufene Link unterscheidet sich von dem, was ich erwartet habe . Da ich nicht die vollständige Aufrufkette sah, dachte ich, ich bräuchte ein Tool, das mich bei der expliziten Abfrage der gesamten Aufrufkette unterstützt.
Also habe ich dieses Tool hauptsächlich für unbekannte Projekte und Online-Szenarien entwickelt, die sich in alltäglichen Umgebungen nur schwer reproduzieren lassen.
deliver Der Retter des angestammten Codes entkommt https://github.com/zhoumengka...
Wenn Ihr Projekt nicht so schlecht ist und die tägliche Umgebung in Ordnung ist, dann ist xdebug der beste Weg, sich mit einem Projekt vertraut zu machen. Dieses Tool dient hauptsächlich der Behebung von Online-Problemen.
Ähnliche Tools umfassen das PHPTrace-Implementierungsprinzip von 360, das etwas anders ist
Sie können die Ausgabe basierend auf Funktionsnamen, Klassennamen, Methodennamen und Routen filtern
Sie können die angegebenen Daten abfragen Inhalt filtern Nach n-mal beenden
Sie können die gesamte Aufrufkette basierend auf der Anforderungs-ID wiedergeben
Der gefilterte Inhalt wird hervorgehoben
Wenn der Aufrufstapel tief ist, können Sie -l angeben Die Anzeige von Deep Calls ausblenden
Tatsächlich ist es relativ einfach. Der erste Schritt besteht darin, Protokolle zu sammeln, und der zweite Schritt besteht darin, die Protokolle zu analysieren.
In der PHP_MINIT-Phase verwenden Sie zend_set_user_opcode_handler, um die Verarbeitung und Analyse von drei Arten von Opcodes einzurichten: ZEND_DO_UCALL, ZEND_DO_FCALL_BY_NAME und ZEND_DO_FCALL.
Beachten Sie, dass Aufrufe einiger integrierter Funktionen und Methoden abgedeckt werden und wir nach Typ filtern können.
Erstellen Sie dann eine neue Protokolldatei in der Phase PHP_RINIT und schreiben Sie die angeforderten Informationen.
pid-ts sapi http_method http_url
Drucken Sie die Aufrufstapelinformationen im benutzerdefinierten Handler während des Anforderungsprozesses aus zweiter Schritt
Verwenden Sie bin/deliverer, um die gesammelten Protokolle zu analysieren und zu organisieren. Dies ist ein PHP-Skript, daher werde ich nicht auf Details eingehen.
$ phpize $ ./configure --with-php-config=/usr/local/php/bin/php-config $ make && sudo make install
[deliverer] extension=deliverer.so
sudo service php-fpm restart
$ chmod +x deliverer
$ ./bin/deliverer -t
$ ./bin/deliverer -tAction::initUser -n3 -l5
Parameter
-t | ||
---|---|---|
-n | 3... Verwenden Sie -v requestId, um den gesamten Aufrufstapel im Detail anzuzeigen | |
php-Video-Tutorial |
Das obige ist der detaillierte Inhalt vonDeliverer, der PHP-Code-Retter, auf den Sie so lange gewartet haben, ist da!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!