vscode上配置docker 宝塔环境的xdebug环境,经历过的哪些坑(macbook版)

news/2025/1/11 0:27:20/文章来源:https://www.cnblogs.com/jpeanut/p/18664981

先说配置的几个逻辑:

1. vscode是要通过php debug插件启动9003监听端口

2. docker的宝塔启动xdebug后,是将运行信息推送到vscode宿主的9003端口;这里有个难点,docker内的宝塔和vscode不在一个本地,是个网络环境,因此需要ip+端口访问

3. vscode根据推过来的9003,匹配到对应文件的断点信息,完成断点调试;这里也有个难点,就是docker中的文件地址和vscode的地址不一致,相比纯本地环境,两边的文件路径不一致,因此需要映射

 

先下配置的步骤:

1. vscode中安装php debug,然后设置配置。这里有个关键是pathMapping,因为在docker中的文件目录是/www/wwwroot/sources/gitee.com,而本地的文件是:/Users/chensm/Desktop/sources/gitee.com

 2. 在docker的宝塔php.ini中的配置(首先需要先安装xdebug),需要调整zend_extension本地的对应目录。

另外,这个是xdeubg3的配置。xdebug2 的配置稍许有些差别,网上自己找了

[Xdebug]
zend_extension=/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host=docker.for.mac.localhost
xdebug.client_port=9003
xdebug.idekey=VSCODE
xdebug.log=/tmp/xdebug.log的

3. 正常情况下载vscode设置断点,运行就有效果了。

 

常见问题

大家肯定大概率是碰到的问题是断点不起作用,那到底是vscode配置问题还是docker中的宝塔的问题?

知道背后逻辑后,其实并不难,就是要找到问题。我咧了几个排查的方式

1. 排查vscode的debug 监听是否正常启动了

在本地运行 如下命令,看是否本地能连上监听端口,连上就是是好的

curl 127.0.0.1:9003  

2. 排查docker中的宝塔xdebug是否正常

phpinfo()中看到xdebug是否有信息,有就是正常的;

在docker中 查看是否有日志,有就是正常的

tail -f /tmp/xdebug.log

3. 排查docker到本地网络是否通畅

curl docker.for.mac.localhost:9003

4. 检查docker中和vscode的文件隐射是否正确

在docker中运行  

tail -f /tmp/xdebug.log

以如下日志为例:

[33773] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_remove" transaction_id="24"><breakpoint type="line" resolved="resolved" 
filename="file:///www/wwwroot/sources/gitee.com/chenshiming0802src/fastadmin_addons_csmitsm/addons/csmitsm/controller/Index.php"
lineno="23" state="enabled" hit_count="1" hit_value="0" id="337730006"></breakpoint></response>

可以清楚的看到filename是vscode设置的这个文件的断点,但是在docked中这个文件路径是:

/www/wwwroot/sources/gitee.com/chenshiming0802src/fastadmin_addons_csmitsm/addons/csmitsm/controller/Index.php

因此在vscode的debug中配置隐射是

"/www/wwwroot/sources/gitee.com":"/Users/chensm/Desktop/sources/gitee.com"

 

本文既是对自己的知识的留痕,希望也对大家有所帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867436.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[第五空间2019 决赛]PWN5 1

先checksec一下,发现开启了NX和canary保护看一下ida反汇编,发现输入全都有限制,无法造成造成栈溢出。代码最后会与随机数判断,若相等会执行system。我们看到有printf(buf),这可以造成格式字符串漏洞。 如果我们用格式字符串修改随机数的值,再将输入一样的值就可以执行我…

身份鉴权(PHP)

引子:上一章主要对PHP中全局变量做了介绍,其中```$_COOKIE```、```$_SESSION```常常在身份鉴权中被使用。而本章则是由代码具体聊聊在PHP Web中开发者所常使用的身份鉴权方式。免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!…

UE4.27, 揣摩源码, 网络同步 (三) RPC

6. RPC6.1. RPC是网络同步的一部分,全称Remote Procedure Call。属性同步只能从服务端向客户端单向传递信息,而RPC可以双向传递消息  6.2. 类型6.2.1. Server调用,Actor所属的Client执行    6.2.2. Client调用,Server执行    6.2.3. Server调用,Server和所…

Discharging Method

Firstly, we introduce Euler Formula.When we use Euler formula, we often need its transformations.Secondly, we design some discharging rules based on Euler Formula.Finally, we give the principle of Discharging Method in proofs.

2024.12.16(SpringBoot知识点总结)

4.2 配置文件与配置类的属性映射方式 4.2.1 使用注解@Value映射 我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上 例如: application.properties配置如下: person: name: zhangsan age: 18 1 2 3 或者,application.yml配置如下: person: name: …

2024.12.7(SpringBoot知识点总结)

2.2.2 SpringBoot代码解析 @SpringBootApplication:标注SpringBoot的启动类,该注解具备多种功能(后面详细剖析) SpringApplication.run(MySpringBootApplication.class) 代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象 2.2.3 SpringBoot工程热部署 我们在…

python SQLAlchemy ORM——从零开始学习 04 如何过滤(筛选)数据库中的数据

04 如何过滤(筛选)数据库中的数据 从数据库中获筛选数据主要应用以下几个接口:filter、filter_by、以及 where。前两个在 02已经展开说过,先展开说where接口 前情提要:依赖03提及的model【本质上就是数据库的链接,有可忽视】 当前的数据库表内容如下,仅作例子,不相同根…

[Linux] 包管理器之【APT】

序续:《[Linux] Linux中安装软件的方式? - 博客园/千千寰宇》 《[Linux] 包管理器之综述【RPM/DPKG|YUM/APT】 - 博客园/千千寰宇》概述:包管理器 APTAPT:Advanced Packaging Tool(现名)解释: Advanced Packaging Tool(apt),作为 原始包管理器DPKG的前端包管理工具(…

2024.11.7(spring boot 创建数据库)

然后搭建四层架构 controller,mapper,pojo,service创建mapper的映射文件

2024.11.8(spring boot创建数据库)

三、连接数据库 1.编写文件 在resources包下找到application.properties,将如下代码写入: spring.datasource.username=root spring.datasource.password=admin spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&cha…

2024.11.9(spring boot创建数据库)

pojo层实体类里的属性要与数据表一一对应;查询所有用户是要返回多个User,所以用List; Service层先用@Autowired注入userMapper; 然后声明方法;

django python manage.py报错TimeoutError: [WinError 10060] A connection attempt failed

diango python manage.py报错 TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 加个代理即可