- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
对于PHP的调试,一般来说我们用 echo 和 var_dump 就够用了.
有时会碰到要解决复杂的逻辑或需要确认代码的运行顺序,这里用 var_dump 效率就比较低了,这时建议用断点的方式进行代码调试.
这里通过 xdebug 配合vscode 的 php debug插件来实现.
在VS Code中安装php debug插件 。
这时会在你的项目的 .vscode 目录下生成 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": "Launch built-in server and debug",
"type": "php",
"request": "launch",
"runtimeArgs": [
"-S",
"localhost:8000",
"-t",
"."
],
"port": 9003,
"serverReadyAction": {
"action": "openExternally"
}
},
{
"name": "Debug current script in console",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"externalConsole": false,
"port": 9003
},
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
这里定义了三种调度模式:
Launch built-in server and debug:适合没有web server的环境,这种模式会用内置的 PHP 调试器启动一个简单的 PHP Web 服务器,然后在浏览器中访问 http://localhost :端口号 来访问您的 PHP 网站.
Debug current script in console:这种是控制台模式.
Listen for Xdebug:这种是监听xdebug,本文采用的就是这种模式.
这里我们可以先看看控制台模式效果:
我们准备一个简单的PHP代码:
<?php
$url = "https://hotaigc.cn";
if ($url == "https://hotaigc.cn") {
echo "success";
} else {
echo "error";
}
我们在if这里打个断点,运行效果如图:
然后打开调试面板(图中1),选择 Debug current script in console(图中2),然后点运行(图中3),就可以看到调试的效果 。
在远程服务器上安装 xdebug,我的是 ubuntu 20.4 环境,用 apt-get 安装就可以了:
sudo apt-get install php8.1-xdebug 。
其他系统参考这里: https://xdebug.org/docs/install 。
这里需要注意的是xdebug需要跟php的版本保持一致,你可以通过 phpinfo() 来确认你的PHP版本.
还有一个易出错的点是部分ubuntu版本会提示找不到xdebug包,这是因为一般都用这个PPA库进行安装( https://launchpad.net/~ondrej/+archive/ubuntu/php ),但这个库已经不支持 ubuntu 20 以下的版本,具体见: https://wiki.ubuntu.com/Releases 。
如下图,红框以下的都已经不支持了,只能自己想办法从源码编译了:
找到 php.ini 的路径,可以从 phpinfo() 中找:
然后添加如下参数:
[xdebug]
# 根据扩展实际存放路径填写
zend_extension=xdebug
;xdebug3.0中用于代替之前的xdebug.remote_enable=On
xdebug.mode=debug
;xdebug3.0中用于代替之前的xdebug.remote_autostart,trigger对应之前的off,yes对应之前的on
xdebug.start_with_request=trigger
;xdebug3.0中用于代替之前的xdebug.remote_host
xdebug.client_host="127.0.0.1"
;xdebug3.0中用于代替之前的xdebug.remote_connect_back=On,它会自动从$_SERVER['HTTP_X_FORWARDED_FOR']
;或$_SERVER['REMOTE_ADDR']变量中获取ip,当然因为$_SERVER只有服务器模式有所以客户端模式是用不了的(可配置其它变量)
;如果找不到ip它会回退(fallback)到xdebug.client_host指定的ip
xdebug.discover_client_host=true
;xdebug3.0中用于代替之前的xdebug.remote_port
xdebug.client_port=9003
;固定填dbgp(因为目前只支持这个协议,也只有这个协议)
xdebug.remote_handler="dbgp"
;这是一个所有网上的文章都提到要设置但实际上却没啥用的参数(不信你可以注释掉试试,一切都正常)
xdebug.idekey="PHPSTORM"
这里需要注意的是 xdebug 的 3.x 版本和 2.x 版本参数是不一样的.
这次我们写一个简单的 Controller 代码(注,我这里用的是Laravel),还是在if这里加个断点(在VS Code的行号左边点击一下即可):
class CommonController extends Controller
{
public function test(Request $request) {
$a = 1;
if ($a == 1) {
return phpinfo();
}
return 1;
}
}
选择 Listen for Xdebug 调试模式,然后启动调试(第3张图中有示例) 。
在浏览器中打开会运行该 Controller 方法的页面(这里涉及到一些Laravel细节,不展开讲),正常情况这时浏览器页面会停在加载中状态,等待调试.
这时打开 VS Code,会看到代码执行到断点这里停住了,我们可以看到变量,调用堆栈,调试工具栏等信息,如下图所示:
最后此篇关于在VSCode中调试远程服务器的PHP代码的文章就讲到这里了,如果你想了解更多关于在VSCode中调试远程服务器的PHP代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
要构建我的远程环境,我需要设置几个环境变量(它们在 docker-compose 文件中使用)。这些是在我的 ZSH 环境中设置的,因此从终端运行 docker-compose build 可以按预期
这是vscode在主机中安装vscode-server时的日志 我发现它得到了 vscode-server 提交 ID,如下日志: [13:07:27.334] Using commit id "f8
在 devContainer 实例中安装 LiveShare 扩展时出现错误。 例如使用:https://github.com/microsoft/vscode-remote-try-go/然后将扩展
在 devContainer 实例中安装 LiveShare 扩展时出现错误。 例如使用:https://github.com/microsoft/vscode-remote-try-go/然后将扩展
我尝试在代码中构建和调试扩展。 我从https://github.com/microsoft/vscode-wordcount下载了字数统计的样本. 当我单击 F5 时,未生成 ./out 文件夹,并
你好,我最近从 Atom 切换到 Vs-code,并尝试了一些解释如何在他们的网站上添加语言支持的教程,我知道语言支持应该有着色器 问题是如何为自定义语言添加颜色?当我基本上使用每种语言时,我习惯了自
为了为我的数据科学工作流提供足够的计算能力,我在远程机器上使用 Docker 容器。虽然我可以通过 vscode-remote 连接到我的远程机器,但我无法连接到运行在这台机器上的 Docker 容器
我有一个创建多个 Docker 镜像的项目。我想在 vscode-remote 中为每个图像设置一个 devcontainer,以便我可以为每个图像启动一个容器。 我一次只需要启动并连接到一个容器/图
我认为这是可以通过编辑实现的 keybindings.json .由于我似乎无法找到可用命令的列表,因此通过自动完成我已经做到了这一点: { "key": "SHORTCUT"
gopls 需要在工作区的根目录下有一个模块。 您可以通过将每个模块作为工作区文件夹打开来处理多个模块。 此工作流程的改进即将推出 ( https://github.com/golang/go/iss
我的电脑上已经安装了 vscode。不久前我注意到它现在包含在 anaconda 发行版中。与我已经安装的 vscode 相比,使用 anaconda 附带的 vscode 有什么好处吗? 仅供引用,
我的电脑上已经安装了 vscode。不久前我注意到它现在包含在 anaconda 发行版中。与我已经安装的 vscode 相比,使用 anaconda 附带的 vscode 有什么好处吗? 仅供引用,
我想为 VSCode 编写一个扩展,重用 vscode-python 的重构/重命名功能扩大。这样,当用户执行我的命令时,我的扩展程序将对 .py 文件的变量进行重命名。我不知道 vscode-pyt
环境 vscode 版本 1.19.1 (1.19.1) 鲁博科普 (0.52.1) Darwin mbp 16.7.0 Darwin 内核版本 16.7.0:2017 年 10 月 4 日星期三 0
我在写 Markdown 文本时尝试自动换行:我希望当我输入比 wrap line length 长的行时自动换行设置,由硬 中断(即 newline 字符)。 我已经设定 word wrap至 wo
我想制作一个涉及发布到我的 API 的 VSC 扩展,但是当我将我的 fetch 语法写出以发布到我的服务器时,它不起作用。所以我想也许我需要添加 node-fetch,所以我做了npm i --sa
我有一个 master 分支,它是生产分支,因此我创建了几个其他分支来修复和缺陷。我在这些分支中做了一些更改,所以我在这些分支中提交了很多次。根据政策,我必须为 master 分支中的缺陷创建单个提交
我正在使用 Visual Studio Code Insiders 版本 1.65.0-insider。直到 3 天前,我通过 VPN 从工作笔记本电脑连接到工作中的远程服务器时没有遇到任何问题。我有
在 Windows 上,我必须在打开的每个新终端 session 上运行命令 start-ssh-agent.cmd。我的开发环境是VSCode,每天都会打开十几个新终端。每次打开终端后,我都必须手动
我最近开始使用 VSCode,我真的很喜欢它。我用谷歌搜索了我的问题,并试图找到与 VSCode 相关的任何答案。 考虑我有以下代码: if (a === 'some condition') re
我是一名优秀的程序员,十分优秀!