等了那么久的PHP代码拯救者Deliverer,来咯!
当一段代码看不到完整的调用链路,你是否需要一个工具来辅助明确查询到整个完整的调用链。这次小编带你了解一下php中的Deliverer,以后再也不用担心代码排查啦。
前几日有位群友接手一段祖传代码,排查很久没有解决,准备提桶跑路,最终帮其解决,完整的过程见 https://mengkang.net/1470.html 但是最后代码的定位我有一些基于个人经验,实际调用的链路和我预计的不一样,都是靠猜。没有看到完整的调用链路,所以我想着需要一个工具来辅助明确查询到整个完整的调用链。
所以搞了这么个工具,主要是用于一些不熟悉的项目,而且日常环境不好复现的线上场景。
deliverer 祖传代码跑路拯救者 https://github.com/zhoumengka...
如果你的项目不是那么糟糕,日常环境都 ok,那么熟悉一个项目最好的方式还是 xdebug,这个工具主要是排查线上问题。
类似的工具有 360 的 phptrace 实现原理上稍微有点不同
功能点
可以根据函数名、类名、方法名、路由来过滤输出
可以在查询到指定过滤内容 n 次之后退出
可以根据 request 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
请求过程中在自定义的 handler 里面打印调用栈信息
最后在PHP_RSHUTDOWN关闭日志文件的写入
第二步
对收集好的日志,利用bin/deliverer进行分析和整理,这块是 php 脚本,就不赘述了。
安装使用
编译
$ phpize $ ./configure --with-php-config=/usr/local/php/bin/php-config $ make && sudo make install
配置 php.ini
追加
[deliverer] extension=deliverer.so
重启 php-fpm
sudo service php-fpm restart
使用分析工具
可以移动./bin/deliverer到你觉得合适的目录,假如在当前目录
$ chmod +x deliverer
用一段我自己很久之前的祖传代码(我的博客)来跑下
$ ./bin/deliverer -t
这样会一直监控所有的 php 进程的执行
$ ./bin/deliverer -tAction::initUser -n3 -l5
参数 | 值 | 解释 |
---|---|---|
-t | Action::initUser | 过滤包含该调用的请求 |
-n | 3 | 统计三次然后退出 |
-l | 5 | 函数(方法)调用深度显示,最多显示 5 层,超出部分在末尾标出 |
$ ./bin/deliverer -v7979-1624369150991941
通过 -v requestId 来详细查看完整调用栈
$ ./bin/deliverer -tSqlExecute::getAll -n1 -l3
当要查询方法,函数调用栈过深,不在层级查询范围之内,则其外层调用显示红色
推荐学习:php视频教程
Atas ialah kandungan terperinci 等了那么久的PHP代码拯救者Deliverer,来咯!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.
