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
相关推荐
q***06293 小时前
ThinkPHP和PHP的区别
开发语言·php
Protein_zmm6 小时前
第一章 计算机网络和因特网(下)
服务器·计算机网络·php
q***9948 小时前
IPV6公网暴露下的OPENWRT防火墙安全设置(只允许访问局域网中指定服务器指定端口其余拒绝)
服务器·安全·php
u***u6858 小时前
PHP在电商中的WooCommerce
开发语言·php
冠希陈、8 小时前
PHP 过滤敏感词(含类库)
开发语言·php·内容敏感词
v***870410 小时前
QoS质量配置
开发语言·智能路由器·php
JaguarJack11 小时前
不用 Web 服务器也能跑 PHP?这事比你想的有意思
php·服务端
一生要强的ymy12 小时前
Polar PHP是世界上最好的语言(困难)
开发语言·php
胡八一1 天前
解决PHP未检测到您服务器环境的sqlite3数据库扩展报错
服务器·数据库·php
名字不相符1 天前
攻防世界WEB难度一(个人记录)
学习·php·web·萌新