• xdebug3开启profile和trace


    【xdebug开启profiler】

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

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

    xdebug.mode=profile
    ;这个目录保存profile和trace文件
    xdebug.output_dir =/var/tmp/xdebug
    
    • 1
    • 2
    • 3

    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是使用下面的配置:

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

    xdebug3是使用下面的配置:

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

    在这里插入图片描述

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

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

    【xdebug开启trace】

    php.ini配置:

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

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

    最终的php.ini配置文件:

    ;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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    git常用命令积累[持续更新]
    Linux系统编程·进程概念
    关于机器学习模型部署过程中遇到的几个error
    FreeRTos延时函数xTaskDelayUntil的工作原理
    学习笔记-.net安全之ueditor远程下载分析
    Java操作k8s api示例:使用kubeconfig文件认证;获取所有pod;获取pod内应用容器的启动日志
    动力节点Docker视频教程从入门到精通
    计算机视觉—车道线检测
    广州搬砖第三年,从一枚小菜鸡到架构师
    在 Mac 上如何更改用户全名/账户名/个人文件夹名/电脑名?
  • 原文地址:https://blog.csdn.net/weixin_38155824/article/details/133171068