CLI下的调试问题
WAMP是相当稳定的Windows下的Apache+Mysql+PHP开发环境
VSCode是当前比较常用的开发环境,有各种插件可以使用
PHP Debug (XDebug)是PHP环境下的调试器,这个插件可以在VSCode下使用
web环境调试设置
无论是wamp环境还是xampp环境,或者phpstudy环境,网上的帖子都比较多,思路总体如下
- 安装集成开发包,确定软件环境相关版本
- 确定并选择这几个组件的版本,尤其是php版本,下载对应的扩展dll(一般集成环境都带了)
- 在php.ini中,加载此dll,并配置xdebug(几乎都用版本3系列了)相关内容(一般通过界面就可选择启用)
[xdebug]
zend_extension="c:/wamp64/bin/php/php7.4.26/zend_ext/php_xdebug-3.1.1-7.4-vc15-x86_64.dll"
xdebug.mode = debug
xdebug.output_dir ="c:/wamp64/tmp"
xdebug.show_local_vars=0
xdebug.log="c:/wamp64/logs/xdebug.log"
xdebug.log_level=7
xdebug.client_port = 9000
xdebug.idekey=PHPSTORM
xdebug.client_host=localhost
- 把php.exe文件的路径设置到系统path中,就是要保证在命令行执行php -v有正确输出
- 在vscode中安装xdebug插件,配置插件的相关设置
文件->首选项->设置->扩展->setting.json
"php.validate.executablePath": "C:\\wamp64\\bin\\php\\php7.4.26\\php.exe",
"php.debug.ideKey": "phpstorm",
-
开启浏览器,加载浏览器PHP debug插件(360、qq浏览器,都是Chrome的,一般在设置或者插件仓库中能找到,也可以下载后安装)
-
vscode进入调试模式(要设置php.exe的路径),设置断点
-
在Apache中设置虚拟主机,或者把待调试文件放置到缺省目录下
-
在浏览器中访问待调试的php文件
-
如果前面的设置都没问题的话,则vscode会拦截中断,进入调试器状态
在wamp下,如上的配置都比较简单,因为xdebug在图形界面中即可启用,而且dll也已经给预安装了。所以前三步都很简单,后面的基本都没啥问题
附:vscode针对项目的调试器设置launch.json配置一般如此,这时执行Listen for Xdebug会一切正常
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9000
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000,
"runtimeArgs": [
"-dxdebug.start_with_request=yes"
],
"externalConsole": false,
"env": {
"XDEBUG_MODE": "debug",
"XDEBUG_CONFIG": "client_port=${port}"
}
},
{
"name": "Launch Built-in web server",
"type": "php",
"request": "launch",
"runtimeArgs": [
"-dxdebug.mode=debug",
"-dxdebug.start_with_request=yes",
"-S",
"localhost:80"
],
"program": "${file}",
"cwd": "${workspaceRoot}",
"serverReadyAction": {
"pattern": "Development Server \\(http://localhost:([0-9]+)\\) started",
"uriFormat": "http://localhost:%s",
"action": "openExternally"
}
但是问题来了,我直接调试PHP文件,就是不进入断点,为何??Launch currently open script 进不了中断
CLI环境调试设置
我反复检测了半天,既然web模式下调试没问题,为何脚本模式就进入不了调试状态呢?
总以为是php.ini的设置问题,vscode中xdebug的设置问题,一头雾水。
后来发现了问题,原来wamp环境下PHP的配置文件使用的是另一个文件
是phpForApache.ini,而不是php.ini
在集成环境下的很多设置都在phpForApache.ini文件中,而当以php脚本cli模式运行程序时,是没有读取这个文件的,所以一直就进入不了调试环境
发现了问题就好办了
下载当前php版本的dll,设置到php.ini即可
-
https://xdebug.org/wizard去这个网站
*
依次按照网页上面的指令执行即可,
1、在命令行执行php -i
2、把php -i的输出拷贝到中间空白区域
3、点击下面按钮进行分析
然后就提示三步,
1、下载给你提示的dll;
2、把这个dll更名后放到php扩展路径下;
3、在php.ini中加一行,启用扩展。照着执行即可
这时再直接执行一个独立的php脚本文件时,将会进入debug模式