php - 为什么 XDebug 会导致页面在 Visual Studio Code PHP 调试扩展中持续加载?
问题描述
我正在尝试在 Visual Studio Code 中调试 php。这是我安装 PHP Debug 扩展(以及 PHP 和 XDebug 作为依赖项)后的第一个项目。如果我有 PHP 可执行文件以命令提示符“C:\php>php -S 0.0.0.0:9000 c:\users\landerson\documents\vs_proj\php_example\index.php”中的文件为目标,则页面正确呈现。但是,如果我在 Visual Studio 中使用配置“Listen for XDebug”开始调试,页面将一直加载,直到我停止调试过程。
我正在关注 Microsoft 解释初始设置的博客条目:https ://blogs.msdn.microsoft.com/nicktrog/2016/02/11/configuring-visual-studio-code-for-php-development/ 。我怀疑没有完全理解“确保将您的网络服务器根目录指向您的项目并且每次请求 PHP 文件时”的说明,这可能是让我绊倒的原因。我尝试过执行和不执行命令提示符条目。这似乎只影响我停止调试过程后发生的事情。我已将 phpinfo() 结果输入https://xdebug.org/wizard.php并按照说明进行操作。我在 C:\php 中既没有 index.php 也没有 php.ini 并且在 c:\users\landerson\documents\vs_proj\php_example 中都有
索引.php
<?php
$myvar = "Hello ";
$myvar = $myvar . "PHP World!";
echo $myvar;
?>
php.ini 底部
zend_extension = C:\php\ext\php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll
[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
C:\Users\landerson\AppData\Roaming\Code\User\settings.json
{
//"http.proxyStrictSSL": false,
"php.validate.enable": true,
"php.validate.executablePath": "C:\\php\\php.exe",
"php.validate.run": "onType"
}
启动.json
{
"version": "0.2.0",
"configurations": [
{
"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
}
]
}
我希望至少没有断点,页面会加载,添加断点会利用 PHP Debug 扩展。似乎 Visual Studio Code 至少让 XDebug 开始侦听端口 9000,但无论出于何种原因,它都没有按预期进行。
解决方案
因此,我最终通过观看此视频使其正常工作: Lyall van der Linde 的https://www.youtube.com/watch?v=a14kN2u5nEk。除其他错误外,我不应该将服务和扩展配置到同一个端口。
据我所知,此时的一个小怪癖是 XDebug 目前没有针对 PHP 32 位版本 7.3.1 的版本,所以我最终安装了旧版本的 XAMPP (7.2.14)。旧版本的 Windows 安装程序可在https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/获得。我已经安装了最新版本的 Visual Studio Code。我已将 PHP 调试扩展添加到 Visual Studio Code 并重新加载了应用程序。
由于 IIS 使用端口 80,我打开 XAMPP 控制面板并导航到主级别配置,然后是服务和端口设置,并在 apache 选项卡下将服务名称 Apahce2.4 设置为主端口 8080 和 SSL 端口 443。我编辑C:\xampp\apache\conf\httpd.conf 并将“Listen 80”替换为“Listen 8080”。然后我在 XAMPP 控制面板中启动了 apache 服务。
然后我在 C:\xampp\htdocs\ 下添加了文件夹“phptest”,并在 VSCode 中打开了该文件夹。添加文件 test.php 并添加行:
<?php
$a = 6;
$b = 3;
$c = 0;
$c = $a * $b;
echo $c;
我更新了 VSCode 用户设置如下
{
"php.validate.enable": true,
"php.validate.executablePath": "C:\\xampp\\php\\php.exe",
"php.validate.run": "onType"
}
我打开http://localhost:8080/phptest/test.php的输出为“18”。
我打开http://localhost:8080/dashboard/phpinfo.php,复制该页面的文本并将结果粘贴到https://xdebug.org/wizard.php的输入表单中。这提示我为 XDebug 下载正确的 dll(对我来说是 php_xdebug-2.6.1-7.2-vc15.dll)。然后我编辑了 C:\xampp\php\php.ini 并附加到文件的末尾:
[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
zend_extension = C:\xampp\php\ext\php_xdebug-2.6.1-7.2-vc15.dll
由于更改了 php.ini,我需要在 XAMPP 控制面板中停止并重新启动 Apache 服务。然后我在 Visual Studio Code 的左侧导航下选择了“Debug”,并添加了一个 PHP 配置“Listen for XDebug”并使用了默认的 launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"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
}
]
}
我在 test.php 中添加了一个断点,并开始在 Visual Studio Code 中进行调试。我在浏览器中导航到 localhost:8080/phptest/test.php,我的断点在 Visual Studio Code 中被击中,允许我查看变量的值并逐步执行代码。
推荐阅读
- react-native-popup-menu - 如何在弹出菜单中添加偏移量?
- elasticsearch - Elasticsearch 中的无痛脚本通过条件检查来操纵分数
- javascript - 将 HTML 解析为组成标签
- c# - 发布目标中缺少 VS 2019 天蓝色功能
- ruby - 未初始化的常量 Van (NameError)
- vuejs2 - 在Vue中设置包装对象的子组件的道具
- powerbi - MS Graph beta/applications OData 属性“resourceSpecificApplicationPermissions”在类型“microsoft.graph.apiApplication”上不存在
- mongodb - 无法在 MongoDB 中使用聚合运算符(storageEngine=mmapv1)
- javascript - jQuery filter() 用于已加载数据的国家/州/城市列表(无 ajax 调用)
- html - 如何将绝对元素居中在另一个绝对元素中,可用于旋转和动画目的