背景
2020-12-22
ubuntu18.04 php7.2
本来今天想通过xdebug的profile来查找页面的性能瓶颈,于是第一步想的时把profile的输入文件改到一个固定的目录,没成想,按照之前的设置方式,怎么设置都不生效,几乎磨了快2小时,猜测是不是由于sudo apt update升级系统是顺便也把它一起升级导致的,所以把它删除重新安装。
先是通过sudo apt install php7.2-xdebug
的方式,安装了,通过phpinfo()命令查看配置情况,发现很多地方都提示了方法已移除,通过连接,看到官方文档,才发现原来xdebug最新版本到了3.0.x,而原来的是2.x,难怪怎么设置都不对。
解决办法
既然各种原因配置不对是因为用了旧的方法导致的,那就根据官方文档,按新的方式来配置,应该就不会有问题了吧!
1.配置profile,trace
;开启xdebug支持,不同的mode的不同的用途,详细说明请看官方文档
xdebug.mode = develop,debug,profile,trace ;如果要多个模式一起开启,就用`,`分隔开就行
xdebug.profiler_append = 0
xdebug.profiler_output_name = cachegrind.out.%p
xdebug.start_with_request = default|yes|no|trigger ;这里与原来不同了,原来如果要开启trace或profile,用的是enable_trace,enable_profile等字段
xdebug.trigger_value=StartProfileForMe ;这里就是原来的profile_trigger_value,trace_trigger_value
xdebug.output_dir = /tmp ;输出文件路径,原来是output_profiler_dir,trace_dir分别设置,现在统一用这个设置就可以了
2.var_dump()不打印彩色
记得要设置xdebug.mode=debug
是才会生效,而且3.x版本不用再设置xdebug..overload_var_dump(已废弃)这个属性了
3.断点调试失效
记得要设置xdebug.mode=develop
模式时才会生效,这个文档里写得挺清楚的。
额外的坑
由于xdebug升级了,webgrind的代码可能还没有升级,所以会存在读取profile文件目录时读取不到,可以自己在该项目的config.php文件中返回目录的代码里直接返回你实际的output_dir。
使用pecl的方式安装xdebug,由于系统里有多个版本的php,最新的是7.4的版本,而要安装的是7.2的版本,虽然直接指定了php的版本为7.2,但是pecl还是会把php安装在数据7.4的版本的库文件夹中,我最后是把7.4的版本先删除了,再用pecl install xdebug,才安装在了正确的位置,这个不懂是pecl的bug,还是单纯是我本机的环境被我搞乱的原因导致的(pecl config-show命令看系统环境配置都是正确的,反正就是很神奇)。
最后
虽然突然间升级到xdebug3.0.1版本,带来的各种配置不兼容问题,搞得我心态差点崩了,但和2.x版本的配置相比,确实简洁了不少,闲着无事时推荐升级使用。