在vscode中,当我们安装了插件 PHP Debug(xdebug.php-debug)或者 xdebug.php-pack 后 我们通过内置默认的 php xdebug配置启动php项目后,默认情况下我们在vscode中设置断点是不会生效的,因为我们的内置php服务默认启动时是不会加上xdebug参数的。 这个时候有2种解决方法:
注意,不管那种方法,前提是你的php必须先安装好xdebug模块!
方法一、自定义vscode php内置服务的启动参数,增加xdebug的启动参数
vscode php内置服务配置 .vscode/launch.json
XML
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch built-in server and debug",
"type": "php",
"request": "launch",
"runtimeArgs": [
"-dxdebug.client_host=127.0.0.1",
"-dxdebug.client_port=9003",
"-dxdebug.mode=debug",
"-dxdebug.start_with_request=1",
"-S",
"0.0.0.0:8000",
"-t",
"${cwd}/public",
"${cwd}/public/router.php",
],
"port": 9003,
"serverReadyAction": {
"action": "openExternally"
}
}
]
}
注意事项:
1. 上面的php内置服务的配置中,我们通过runtimeArgs增加的 -d启动参数,这个就相当于我们在php.ini的配置文件里面增加了相应的配置参数一样。
PHP内置服务的完整语法 : php [options] -S <addr>:<port> [-t docroot] [router]
这里可用的其他的可选性
-d foo[=bar] Define INI entry foo with value 'bar'
-z <file> Load Zend extension <file>.
2. 上面的xdebug启动参数配置是针对debug v3版本的,如果是v2版本需要有调整,2个版本的区别如下:
For Xdebug v3.x.x:
xdebug.mode = debug
xdebug.start_with_request = yes
For Xdebug v2.x.x:
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_port = 9000
xdebug v2版本的启动参数为
"runtimeArgs": [
"-dxdebug.remote_enable = 1",
"-dxdebug.remote_autostart = 1",
"-dxdebug.remote_port = 9000",
"-S",
"0.0.0.0:8000",
"-t",
"${cwd}/public",
"${cwd}/public/router.php",
],
方法二、安装插件 DEVSENSE.phptools-vscode
如果不手动增加上面的配置,就需要安装这个插件,这个插件安装后,我们通过vscode启动PHP内置服务就会自动帮我们增加xdebug的启动参数, 如
Listening to Xdebug on port 0.0.0.0:9003,:::9003 ...
Launching /opt/local/bin/php -dxdebug.client_host=127.0.0.1 -dxdebug.client_port=9003 -dxdebug.mode=debug -dxdebug.start_with_request=1 -S localhost:8000 -t /tp8/server/public /tp8/server/public/router.php ...
PHP Development Server
不过这个插件免费版只能使用基础功能,高级功能是要收费的。