ilnytskyi / xtc
xDebug 到 Chromium 跟踪事件格式转换器
README
这是一个将 xDebug 跟踪转换为可在浏览器性能标签中可视化的 Chromium 格式的工具。
功能
- 将 xDebug 跟踪文件转换为 Chromium 使用的 JSON 格式
- 命令行界面,便于集成到自动化工作流程中
要求
- PHP 8.1 或更高版本
- xDebug 3+,并设置 INI 为
xdebug.trace_format=1
通过 Composer 安装
- 使用 composer
composer require ilnytskyi/xtc
- 仅作为开发依赖
composer require --dev ilnytskyi/xtc
从 git 安装
- 将此存储库克隆或下载到您的本地计算机
- 将
xtc
脚本添加到项目中的合适位置或全局链接
ln -s $(pwd)/xtc /usr/local/bin/xtc
- 使用
xtc
脚本命令转换您的 xDebug 跟踪
用法
对于 CLI 脚本,建议将调用包装在 trace
命令中
./vendor/bin/xtc trace --cmd="script.php"
要查看确切的包装命令,请使用 --debug
标志。尝试进行自我检查
./vendor/bin/xtc trace --debug --cmd="./vendor/bin/xtc --help"
xtc 使用正确的 xDebug 参数包装调用。输出应如下所示
www@3f62bf5fbb1d:~$ ./vendor/bin/xtc trace --debug --cmd="./xtc --help"
Tracing: ./vendor/bin/xtc --help
/app_root/vendor/bin/xtc:564:
string(255) "XDEBUG_MODE=trace XDEBUG_TRIGGER=PHPSTORM /usr/bin/php8.1 -d xdebug.collect_return=0 -d xdebug.collect_params=0 -d xdebug.collect_assignments=0 -d xdebug.trace_format=1 -d xdebug.trigger_value="PHPSTORM" -d xdebug.trace_output_name=xtc_trace.%t xtc --help"
Unknown command: --help
Available commands: trace, convert, watch
Converting /app_root/var/xdebug_dumps/xtc_trace.1699803846.xt
The trace file: /app_root/var/xdebug_dumps/xtc_trace.1699803846.xt
Will be processed to: /app_root/var/xdebug_dumps/xtc_trace.1699803846.xt.json
With following convertOptions
Show internal PHP functions: 0
Show arguments: 0
Sampling: 0 μs
Trace is processed successfully /app_root/var/xdebug_dumps/xtc_trace.1699803846.xt.json
现在可以在跟踪查看器中可视化 /app_root/var/xdebug_dumps/xtc_trace.1699803846.xt.json
文件。
手动生成 xDebug 跟踪
XDEBUG_MODE=trace XDEBUG_TRIGGER=PHPSTORM php {script.php}
#to capture functions return values
XDEBUG_MODE=trace XDEBUG_TRIGGER=PHPSTORM php -d xdebug.collect_return=1 {script.php}
要转换 xDebug 跟踪文件,请使用 xtc
命令并指定输入
./vendor/bin/xtc convert --file=xdebug/dumps/{trace.file}
要自动移动转换后的 JSON 跟踪,请使用带有文件名或文件夹的 --out
选项
./vendor/bin/xtc convert --file=xdebug/dumps/{trace.file} --out=destination/folder/my_trace.json
#OR
./vendor/bin/xtc convert --file=xdebug/dumps/{trace.file} --out=destination/folder/
要监视特定目录
./vendor/bin/xtc watch --dir=xdebug/dumps/
使用与 convert
命令相同的参数来应用于配置文件。
参数和返回值
如果设置了 INI 为 xdebug.collect_return=1
,则 xDebug 跟踪文件可能会收集正在运行的函数的返回值。
还可以使用 INI 设置 xdebug.collect_params=1
收集参数。
当使用 --args=1
选项转换跟踪时,您可以看到传递给函数的值和返回的值。
时间轴可视化可能对调试或反向工程非常有用
./vendor/bin/xtc convert --file=xdebug/dumps/{trace.file} --args=1
使用 --help
选项查看关于命令的更多信息
./vendor/bin/xtc convert --help
./vendor/bin/xtc watch --help
关于性能测量的注意事项
- 使用 xDebug 跟踪会增加显著的性能开销,可能会将脚本执行时间增加 10 倍!
以下是一个跟踪同一脚本的示例
尽管两个分析器的可视化跟踪看起来相似,但可以看出 xDebug 执行时间大约是 SPX 的 10 倍。
- 如果您的目标是分析性能,建议使用比 xDebug 开销更低的分析器。
- 如果您需要更多像参数/返回值之类的信息,您可以使用 xDebug,并通过
./vendor/bin/xtc
转换跟踪以进行更方便的分析。 - xDebug 还收集所有 PHP 内部函数的调用,但默认情况下,
./vendor/bin/xtc
会排除它们。如果您想在时间轴上看到它们,请使用--internal=1
。
可视化
- Chrome DevTools 性能标签
Ctr+Shift+J -> 性能
- https://ui.perfetto.dev
- https://www.speedscope.app
- 其他任何 Chromium 跟踪(Google Trace Event 格式)查看器