如果您觉得此扩展名有用,如果它可以帮助您解决问题,并且如果您欣赏此处给出的支持,请考虑赞助我们的工作。
安装扩展名:按F1
,键入ext install php-debug
。
此扩展是Derick Rethans的VS代码和Xdebug之间的调试适配器。 Xdebug是需要在服务器上安装的PHP扩展名(Linux上的.so
文件和Windows上的.dll
)。
安装Xdebug我强烈建议您制作一个简单的test.php
文件,放置一个phpinfo();
在其中说明,然后复制输出并将其粘贴到Xdebug安装向导中。它将对其进行分析并为您的环境提供量身定制的安装说明。简而言之:
在Windows上:为您的PHP版本,Architecture(64/32位),线程安全(TS/NTS)和Visual Studio编译器版本下载适当的预编译DLL,并将其放置在PHP扩展文件夹中。
在Linux上:要么将源代码作为Tarball下载,要么用GIT克隆,然后对其进行编译。或查看您的发行版是否已经提供了预制的软件包。
通过将zend_extension=path/to/xdebug
添加到您的php.ini中,将php配置为使用xdebug。您的php.ini的路径在“加载配置文件”下的phpinfo()
输出中显示。
在您的php.ini
中启用远程调试:
对于Xdebug v3.xx:
xdebug.mode = debugxdebug.start_with_request = yes
对于Xdebug v2.xx:
xdebug.remote_enable = 1xdebug.remote_autostart = 1xdebug.remote_port = 9000
还有其他方法可以告诉Xdebug连接到远程调试器,例如cookie,查询参数或浏览器扩展程序。我推荐remote_autostart
(XDEBUG V2)/ start_with_request
(xdebug v3),因为它“恰好工作”。还有多种其他选项,例如端口,请参阅有关远程调试的Xdebug文档以获取更多信息。请注意,默认的Xdebug端口从9000更改为Xdebug V2之间,从9000更改为9003。
如果您正在进行Web开发,请不要忘记重新启动Web服务器以重新加载设置。
通过检查Xdebug部分的phpinfo()
输出来验证安装。
在您的项目中,请转到调试器并击中小齿轮图标,然后选择PHP 。将为您创建新的启动配置,并使用三种配置:
收听Xdebug此设置将仅在Xdebug的指定端口(默认为9003)上聆听。如果您像上面建议的那样配置了Xdebug,则每次您向Web服务器浏览器提出请求或启动CLI脚本XDebug时,您都可以连接,您可以停止在断点,异常等方面停止。
启动当前打开脚本此设置是CLI调试的示例。它将作为CLI启动当前打开的脚本,在调试控制台中显示所有STDOUT/STDERR输出,并在脚本退出后结束调试会话。
启动内置Web服务器此配置在随机端口上启动了PHP内置Web服务器,并使用serverReadyAction
指令打开浏览器。该端口是随机的(Localhost:0),但可以更改为所需的固定端口(例如:Localhost:8080)。如果需要路由器脚本,请与program
指令一起添加。其他PHP/XDEBUG指令在每个页面加载上触发调试。
Xdebug V2(旧版)安装也有配置。
有关通过VS代码调试的更多一般信息,请访问https://code.visualstudio.com/docs/editor/debugging。
注意:您甚至可以在不
launch.json
的情况下调试脚本。如果没有打开文件夹,并且VS代码状态栏是紫色的,则按F5
使用XDEBUG3特定参数启动打开脚本。如果php可执行文件不在路径中,则可以为其提供设置php.debug.executablePath
。要调试工作,仍必须正确安装Xdebug。
request
:始终"launch"
hostname
:侦听Xdebug时要绑定的地址(默认:所有IPv6连接(如果有),其他所有IPv4连接)或Unix域套接字(带有unix://
)或Windows Pipe( ?pipename
) - 无法与港口
port
:聆听Xdebug的端口(默认值: 9003
)。如果将端口设置为0
则系统选择一个随机端口,并且占位符${port}
被env
和runtimeArgs
中所选端口替换。
stopOnEntry
:是否要在脚本的开头中断(默认: false
)
pathMappings
:服务器路径列表映射到计算机上的本地源路径,请参见下面的“远程主机调试”
log
:是否将VS代码和适配器之间的所有通信记录到调试控制台之间。请参阅进一步的故障排除。
ignore
:应忽略错误的球模式的可选数组(例如**/vendor/**/*.php
)
ignoreExceptions
:一个应忽略的异常类名称的可选数组(例如BaseException
, NS1Exception
, *Exception
或**Exception*
)
skipFiles
:一系列环球图案,在调试时跳过。允许恒星模式和否定,例如**/vendor/**
或!**/vendor/my-module/**
。
skipEntryPaths
:Glob模式的数组,以立即分离并忽略输入脚本是否匹配(例如**/ajax.php
)。
maxConnections
:仅接受此数量的并行调试会话。将撤离其他连接,并且他们的执行将继续而无需调试。
proxy
:DBGP代理设置
enable
:要启用代理注册设置为true
(默认为`false)。
host
:代理的地址。支持主机名,IP地址或UNIX域插座(默认值:127.0.0.1)。
port
:适配器将向代理注册的端口(默认值: 9001
)。
key
:允许代理可以将请求匹配到您的编辑器的唯一键(默认: vsc
)。默认值是从VSCODE设置php.debug.idekey
中获取的。
timeout
:在放弃与代理的连接之前,要等待的毫秒数(默认值: 3000
)。
allowMultipleSessions
:如果代理应同时转发多个会话/连接(默认: true
)。
xdebugSettings
:允许您覆盖Xdebug的远程调试设置,以微调Xdebug满足您的需求。例如,您可以使用max_children
和max_depth
播放,以更改检索到的数组和对象子的最大数量,以及在数组和对象等结构中的最大深度。这可以加快慢速机器上的调试器。有关可以设置的功能名称的完整列表,请参考Xdebug文档。
max_children
:最初检索的数组或对象子女的最大数量
max_data
:最初检索的最大可变数据量。
max_depth
:调试器发动机在发送阵列,哈希或对象结构向IDE时可能返回的最大深度(由于逐步检索深度,因此不需要更改它,因此很大的值可能会导致IDE悬挂)。
show_hidden
:如果要拥有有关属性的更详细的内部信息(例如,类的私人成员等),则可以由IDE设置此功能。零表示未向IDE显示隐藏的成员。
xdebugCloudToken
:而不是在本地聆听,而是打开连接并用Xdebug Cloud注册,并接受该连接上的调试会话。
stream
:允许影响DBGP流。 Xdebug仅支持stdout
请参阅DBGP Stdout
stdout
:重定向stdout流:0(禁用),1(副本),2(重定向)
特定于CLI调试的选项:
program
:应该启动脚本的路径
args
:参数传递给脚本
cwd
:启动脚本时要使用的当前工作目录
runtimeExecutable
:用于启动脚本的PHP二进制文件的路径。默认情况下,路径上的一个。
runtimeArgs
:其他论点要传递给PHP二进制
externalConsole
:在外部控制台窗口而不是调试控制台中启动脚本(默认: false
)
env
:环境变量传递到脚本
envFile
:包含环境变量定义的文件的可选路径
线断点
有条件的断点
命中计数断点:支持>=n
, ==n
和%n
之类的条件
功能断点
介入,介入,走出去
突破进入
从停止进入(F10/F11)开始
违反未知的例外和错误 /警告 /通知
多个并行请求
堆栈跟踪,示波器变量,超级全局,用户定义的常数
数组和对象(包括className,私有和静态属性)
调试控制台
手表
设置变量
作为CLI运行
运行而无需调试
DBGP代理注册和未注册支持
Xdebug云支持
要在远程主机上调试运行的应用程序,您需要告诉XDEBUG与localhost
不同的IP连接。可以通过将xdebug.client_host
设置为IP来完成,也可以通过设置xdebug.discover_client_host = 1
来使XDebug始终连接到执行Web请求的机器。后者是唯一支持多个用户调试同一服务器并为Web项目“工作”的设置。同样,请参阅有关该主题的Xdebug文档以获取更多信息。
要使VS代码在本地计算机上的右文件中映射服务器上的文件,您必须在启动。JSON中设置pathMappings
设置。例子:
//服务器 - >本地“ pathmappings”:{“/var/www/html”:“ $ {workspacefolder}/www”,“/app”:“ $ {workspacefolder}/app”}
另请注意,设置任何CLI调试选项都不会与远程主机调试一起使用,因为该脚本始终在本地启动。如果要在远程主机上调试CLI脚本,则需要从命令行手动启动它。
调试器可以用IDE键注册到DBGP代理。然后,代理将仅转到IDE,只有那些具有该指定IDE密钥的DBGP会话。这在多源环境中很有帮助,在该环境中,开发人员不能同时使用相同的DBGP端口。需要仔细的设置,该请求对Web服务器的请求包含匹配的IDE密钥。
Dbgpproxy的官方实施。
还建议使用Xdebug助手浏览器扩展名。那里的请求侧IDE键可以轻松配置。
在stackoverflow上询问一个问题
如果您认为找到一个错误,请打开问题
确保您已安装了此扩展名的最新版本和xDebug
尝试一个简单的PHP文件以重新创建问题,例如从TestProject中
设置"log": true
和观察调试控制台面板
在您的php.ini中,将xdebug.log = /path/to/logfile
设置
在Twitter @damjancvetko上伸出援手
要在此适配器上攻击,请克隆存储库,然后在VS代码中打开它。您需要安装了NPM并在路径中的NODEJS。还应安装最近的PHP和Xdebug,并在您的路径中安装。
通过在项目目录中的命令行上安装NPM npm install
,或选择Terminal / Run Task... / npm / npm: install
。
通过在项目目录中的命令行上运行npm run watch
Terminal / Run Build Task...
在VS代码菜单中选择“ build / Watch”过程。
通过打开运行和调试侧栏,选择Debug adapter
配置并单击绿色运行箭头(或击中F5
)来启动调试适配器。编译的适配器将在“服务器模式”中运行,并在TCP端口4711上侦听。
通过运行code testproject --extensionDevelopmentPath=.
在项目目录中的命令行上或选择Launch Extension
运行和调试配置并按下绿色运行箭头。另一个快捷方式是运行npm run start
。您还可以运行内部人员构建VS代码,以测试新功能。
在“扩展开发主机”实例中,开放.vscode/launch.json
和Uncomment debugServer
配置行。通过选择所需的配置并击中F5
来运行PHP调试会话。现在,您可以像上面指定的那样调试testProject,并在第一个VS代码实例中设置断点,以逐步浏览适配器代码。
有关测试扩展的更多信息,请访问https://code.visualstudio.com/api/working-with-with-extensions/testing-extension。
测试用摩卡咖啡编写,可以通过npm test
或Terminal / Run Task... / npm: test
。当您提交PR时,测试将在Linux,MACOS和Windows上的CI上运行,以针对多个PHP和Xdebug版本进行。
提交PR之前,还可以运行npm run lint
或Terminal / Run Tasks... / npm: lint
。