为什么PHP程序会报错,无论肉眼复习多少遍,都觉得自己写的还可以;有switch代码分支判断,为什么不能进入我想要的case;调试PHP代码仍然使用var_dump($re);死();。试试Xdebug断点调试。他能做什么?开启Debug监控,跟着代码一步步深入到程序的最深处。您将了解真正的代码运行步骤和调用关系。还可以知道程序运行时各个变量的取值和变化。同时避免了var_dump的代码植入,(如果忘记删除在线提交,那这耻辱柱就钉在你身上了)好了,介绍下我们本期的主角XdebugXdebug。Xdebug是一个PHP扩展。提供调试和性能分析能力。[1]它使用DBGp调试协议。Xdebug可以提供的调试信息包括:错误消息[2]中的堆栈和函数跟踪:用户定义函数的完整参数显示函数名、文件名和行指示支持成员函数内存分配保护无限递归Xdebug还提供:PHP脚本分析信息[3]代码覆盖率分析和调试器前端,以交互方式调试脚本功能。[4]以上摘自wiki,开始介绍动手环境。本文主要围绕Docker环境下PHP的Xdebug调试展开。先说一下笔者的演示环境:Mac环境,安装VirtualBox,运行一个Ubuntu虚拟机,然后安装Dockerce软件。看到这里,大家不要急着关闭网页。我的环境可能有点怪异,但是大体流程是差不多的。这套PHPDocker环境在本文有详细介绍:【Docker快速搭建一套PHP、Nginx、MySQL、Redis、Xdebug、Memcached开发环境安装软件PHP安装XdebugXdebug官方文档有介绍。Linux或Mac环境通过命令行:$peclinstallxdebugWindows用户可以直接通过Xdebug下载页面根据自己的PHP版本下载*.dll,放在展开目录下。$php-v//检查PHP版本。手动编译安装对于网络来说不是那么顺畅,pecl也不能用。##获取源码$gitclonehttps://github.com/xdebug/xdebug.git##进入目录$cdxdebug##phpcheck$phpize##编译前配置,一般来说phpize已经准备好了大部分工作,并配置$./configure##编译$make##测试和安装$maketest&&makeinstallDocker环境为PHP安装PHP和扩展Docker环境提供了两种方式。第一种是通过pecl在线下载安装,受限于网络情况,很可能会失败。那么可以尝试通过其他方式下载pecl-Xdebug的压缩包,添加到docker容器中进行安装。FROMphp:7.3-fpm-buster...#方法1peclinstallRUNyes|peclinstallxdebug\&&echo"zend_extension=$(find/usr/local/lib/php/extensions/-namexdebug.so)">/usr/local/etc/php/conf.d/xdebug.ini\&&echo"xdebug.remote_enable=on">>/usr/local/etc/php/conf.d/xdebug.ini\&&echo"xdebug.remote_autostart=off">>/usr/local/etc/php/conf.d/xdebug.ini##-----------------------------------------------#方法2下载并安装xdebugADD./xdebug-2.6.1.tgz/tmp/php7-xdebugRUNcd/tmp/php7-xdebug/xdebug-2.6.1/&&phpize&&./configure&&\make&&makeinstallconfigurexdebug找到我们的配置文件。##文件:/etc/php/conf.d/xdebug.inized_extension=xdebug.so//启用xdebug扩展!xdebug.remote_connect_back=1xdebug.remote_enable=1//启用远程调试xdebug.remote_mode="req"xdebug.remote_handler="dbgp"xdebug.remote_host="10.0.2.2"//这是你的PHPStorm环境的IP地址xdebug.remote_port=9000//默认9000,最请不要触摸xdebug.idekey="PHPSTORM"//PHPStormIDE的默认值xdebug.remote_autostart=1。关于xdebug.remote_host的ip,不要想当然的填127.0.0.1。您必须查看运行PHPStorm的环境。是和PHP运行环境在同一个环境吗?如果是这样,你可以填写127.0.0.1。那没问题。如果是Docker,那肯定不是同一个环境。如何查看我们IDE所在环境的IP,首先编辑入口文件index.php,获取SERVER变量的REMOTE_ADDR属性。##文件:~/public/index.php服务器,点击这里圆圈中的导入按钮。在弹出框中选择新添加的Deployment配置。(就是刚才输入的Newservername)File/Direcotry你检查一下,一般是没有问题的。服务器上的绝对路径是运行代码的Docker容器内的根目录。调整好后点击确定。不要着急,关闭弹框,然后在服务器上确认绝对路径。估计这是PHPStorm的bug或者产品需求。最好在弹框内外配置一次。OK,PHPStorm的配置就完成了。Docker运行时配置不用担心,在Docker运行时容器中,需要配置两个环境变量PHP_IDE_CONFIG、XDEBUG_CONFIG.serverName来写入Deployment配置的名称。remote_host填写PHPStorm环境的IP,即PHP中$_SERVER['REMOTE_ADDR']的值。remote_port默认900,需要在docker-compose.yaml配置文件中给php容器添加环境变量:##file:~/docker-compose.yamlversion:"2"services:php:image:paulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2卷:...端口:...环境:PHP_IDE_CONFIG:“serverName=bs”XDEBUG_CONFIG:“remote_host=10.0.2.2remote_port=9000"如果使用dockerrun拉起的容器,加上以下参数$dockerrun...--envPHP_IDE_CONFIG="serverName=dealman"--envPHP_IDE_CONFIG="serverName=bs"...php/bin/bash启动Debug1。启用Xdebug监听,点击下方红色电话。现在是开始收听状态。2、找到入口文件~/index.php,选择第一行代码,打断点(不知道打哪里,按Common+F8)3、开始访问网站。这里的第一个断点在红色箭头处。通过点击绿色按钮Stepover,代码一步步执行到蓝色箭头处。这行代码也被IDE以蓝色突出显示。这时候你也可以从Variables中看到定义的变量$conf的值。结语前老板还在炫耀用记事本手撕代码,过一遍。使用高级工具和详细的仪表板以越来越快的开发速度开发和调试代码。希望大家看完后能够配置成功。如果您有任何疑问,请询问。Mac下参考vscode使用xdebug调试PHP多进程程序在基于Docker的PhpStorm中配置Xdebug在PHPStorm中使用Xdebug调试PHP程序(框架和原生均可)
