xdebug3开启profile和trace

【xdebug开启profiler】

https://xdebug.org/docs/profiler

http://www.xdebug.org.cn/docs/profiler

1、php.ini添加下面配置然后重启php容器:

php 复制代码
xdebug.mode=profile
;这个目录保存profile和trace文件
xdebug.output_dir =/var/tmp/xdebug

PHP日志提示报错:

PHP message: Xdebug: Profiler File '/var/tmp/xdebug/cachegrind.out.8' could not be opened

解决方案:将/var/tmp/xdebug目录权限设置成777:

chmod 777 /var/tmp/xdebug

这个目录最好换成挂载的项目路径下,这样才能在本地环境下查看生成的profile文件,比如:

xdebug.output_dir = /www/php_demo/xdebug

也可以换成下面的配置,就可以在当前执行方法的文件下生成profile文件:

xdebug.output_dir = ./

2、phpstorm开启debug,执行一下要追踪的方法,就会生成profile文件

生成文件的名称总是以 "cachegrind.out."开头,默认情况下以 PHP(或 Apache)进程的 PID(进程 ID)结尾。您可以使用 xdebug.profiler_output_name 更改文件名格式。

3、分析 Profiles

(1)通过phpstorm分析

双击shift,启动万能的搜索框,输入"Analyze Xdebug Profiler Snapshot"回车即可选择分析profile文件。

(2)通过QCacheGrind分析

下载地址:https://sourceforge.net/projects/qcachegrindwin/
注意:
1、修改php.ini xdebug.use_compression参数配置。将其设为false。否则生成的profile文件是带有gz后缀的压缩文件,QCacheGrind无法打开这个格式的文件。
2、如果打开文件目录时找不到文件,把搜索文件类型修改为"All File"

自主选择是否生成profile

xdebug2和xdebug3的配置是不一样的:

xdebug2是使用下面的配置:

php 复制代码
;下面这两个参数在xdebug3都被移除了,参考文档:https://xdebug.org/docs/upgrade_guide
;xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 1

xdebug3是使用下面的配置:

php 复制代码
php.ini配置加上:
;这个配置使得只有在请求开始时存在特定触发器时,功能才会被激活。
;https://local.phpdemo.com/?XDEBUG_PROFILE=1 请求后面带有特定的标识才会执行对应的操作,比如生成profile文件
;https://xdebug.org/docs/all_settings#start_with_request
xdebug.start_with_request=trigger

访问接口的时候,加上XDEBUG_PROFILE参数即可,value可以为任意值
https://local.phpdemo.com/?XDEBUG_PROFILE=1

php 复制代码
;通过 xdebug.trigger_value,您可以控制激活触发器的具体触发值。如果 xdebug.trigger_value 设置为空字符串,则任何值都可以触发。
;如果加上这个配置,访问接口得是:http://local.phpdemo.com/?XDEBUG_PROFILE=cowboy,才会激活。要对接口加上断点调试,就得加上XDEBUG_SESSION=cowboy
xdebug.trigger_value=cowboy

【xdebug开启trace】

php.ini配置:

php 复制代码
xdebug.mode=debug,profile,trace
;这个目录保存profile和trace文件,要先设置777权限
xdebug.output_dir = /www/php_demo/xdebug
;指定trace的文件显示格式,默认是0;生成的文件直接拉到浏览器就能打开了。
xdebug.trace_format = 3

同样访问格式:http://local.phpdemo.com/?XDEBUG_TRACE=cowboy
生成的trace文件直接拉到浏览器就能打开了。

最终的php.ini配置文件:

php 复制代码
;xdebug3用下面的配置
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
;xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.idekey=PHPSTORM

;开启profile(注意:可以设置多个xdebug模式,比如xdebug.mode=debug,trace,profile)
xdebug.mode=debug,profile,trace
;这个目录保存profile和trace文件,要先设置777权限
xdebug.output_dir = /www/php_demo/xdebug
;关闭压缩,qcachegrind 工具不支持.gz 格式的分析日志。phpstorm就可以支持分析压缩文件
xdebug.use_compression = false

;下面这两个参数在xdebug3都被移除了,参考文档:https://xdebug.org/docs/upgrade_guide
;xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 1

;这个配置使得只有在请求开始时存在特定触发器时,功能才会被激活。
;https://local.phpdemo.com/?XDEBUG_PROFILE=1 请求后面带有特定的标识才会执行对应的操作,比如生成profile文件
;https://xdebug.org/docs/all_settings#start_with_request
xdebug.start_with_request=trigger
;通过 xdebug.trigger_value,您可以控制激活触发器的具体触发值。如果 xdebug.trigger_value 设置为空字符串,则任何值都可以触发。
;如果加上这个配置,访问接口得是:http://local.phpdemo.com/?XDEBUG_PROFILE=cowboy,才会激活。
xdebug.trigger_value=cowboy

;指定trace的文件显示格式,默认是0;生成的文件直接拉到浏览器就能打开了。
xdebug.trace_format = 3
相关推荐
广州灵眸科技有限公司1 小时前
从手动三步到上电即连:4G模组systemd开机自连方案
linux·运维·服务器·开发语言·网络·人工智能·php
aixingpan1 小时前
aixingpan.cn API开发文档:api_docs_trichart_natal_composite_transit2接口指南
前端·php
妙码生花1 小时前
使用git更新ai-go-admin框架
前端·人工智能·git·golang·typescript·php
PHP实战开发录2 小时前
PHP文件上传成功为什么页面却找不到
开发语言·nginx·php·开发
qq_452396233 小时前
第十篇:《eBPF 可观测性:零侵扰的深度内核追踪》
服务器·网络·php
AC赳赳老秦3 小时前
文旅市场公开数据分析:基于 OpenClaw 采集景区客流与门票公示数据,生成区域文旅热度监测报告
java·c语言·python·php·symfony·deepseek·openclaw
SDWAN_Cheap4 小时前
SD-WAN智能选路技术的算法与实现机制
算法·php·sdwan
xiancai_xianyu6 小时前
想把数据模型一次建完美再上AI?会一直卡在建模里
开发语言·人工智能·php·数据模型·语义层·本体建模·企业知识网络
AC赳赳老秦7 小时前
环保监测公开数据应用:OpenClaw 抓取空气与水质公开监测数据,开展区域环境质量趋势分析
大数据·数据库·人工智能·python·php·deepseek·openclaw
维克兜率天9 小时前
4.3.2.1 日常监控:上线只是开始
服务器·数据库·python·区块链·php·量化