xDebug 到 Chromium 跟踪事件格式转换器

v1.0.1 2024-01-31 18:15 UTC

This package is auto-updated.

Last update: 2024-09-30 01:19:20 UTC


README

这是一个将 xDebug 跟踪转换为可在浏览器性能标签中可视化的 Chromium 格式的工具。 PHP 跟踪转储为 Chrome 性能标签中的时间轴视图

功能

  • 将 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 安装

  1. 将此存储库克隆或下载到您的本地计算机
  2. xtc 脚本添加到项目中的合适位置或全局链接
ln -s $(pwd)/xtc /usr/local/bin/xtc
  1. 使用 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

PHP trace dump with captured arguments values and return values

使用 --help 选项查看关于命令的更多信息

./vendor/bin/xtc convert --help
./vendor/bin/xtc watch --help

关于性能测量的注意事项

  • 使用 xDebug 跟踪会增加显著的性能开销,可能会将脚本执行时间增加 10 倍!

以下是一个跟踪同一脚本的示例

  • 带有 xDebug ~10s bin/magento 的 xDebug 跟踪转储
  • 带有 SPX ~1s bin/magento 的 PHP-SPX 跟踪转储

尽管两个分析器的可视化跟踪看起来相似,但可以看出 xDebug 执行时间大约是 SPX 的 10 倍。

  • 如果您的目标是分析性能,建议使用比 xDebug 开销更低的分析器。
  • 如果您需要更多像参数/返回值之类的信息,您可以使用 xDebug,并通过 ./vendor/bin/xtc 转换跟踪以进行更方便的分析。
  • xDebug 还收集所有 PHP 内部函数的调用,但默认情况下,./vendor/bin/xtc 会排除它们。如果您想在时间轴上看到它们,请使用 --internal=1

可视化

  1. Chrome DevTools 性能标签 Ctr+Shift+J -> 性能
  2. https://ui.perfetto.dev
  3. https://www.speedscope.app
  4. 其他任何 Chromium 跟踪(Google Trace Event 格式)查看器

灵感来源