NetBeans+XDebug 多人远程调试配置
NetBeans 的安装及配置
安装
Windows下安装需要先配置
JDK
, 配置JDK
的教程网上很多,就不多赘述
新建/导入项目
- 新建/导入项目时,
Run As
选择Local Web Site (running on local web server)
Project URL
保持默认即可
注意⚠️:导入已有项目不要直接用
NetBeans
打开项目目录,而是点击新建PHP项目,然后选择项目导入,可以避免自动识别成错误类型的项目
项目运行配置
- 右键点击项目根节点,选择
Properties
,弹出窗口选择Run Configuration
Run As
保持Local Web Site (running on local web server)
不变Project URL
与Index File
保持默认,Arguments
可不填- 点击
Advanced
, 在弹出窗口里配置远程目录与本地目录映射(很重要,错误配置会导致调试时的断点位置错乱,如果远程项目位于镜像内,则填写镜像内的路径!) Debug URL
选择Do Not Open Web Browser
注意⚠️:4、5两点每个项目均需要单独配置
配置图示
配置 debug
- 跳转到
NetBeans
设置->PHP->Debugging 窗口 - 设置监听窗口
Debugger Port
为9999
(可自定义,未被占用即可) Session ID
保持默认即可(即idekey
)- 其他选项按照需求自选
至此,NetBeans
里的设置就完成了,但是,要做到远程调试服务器里的代码,还需要把服务器的端口转发到本地端口(9999),为此,还需做一些额外的工作。
PHP XDebug 配置
- PHP安装并启用
XDebug
拓展,执行php -m | grep xdebug
输出xdebug
即表示成功启用 - 编辑
xdebug.ini
,内容如下xdebug.remote_enable=1
xdebug.mode=debug,profile
xdebug.client_host=ppunknown.cn
xdebug.client_port=12348
xdebug.remote_connect_back=0
xdebug.idekey=ppunknown
# 记录 xdebug与调试器会话 日志
xdebug.log="/tmp/xdebug.log"
xdebug.start_with_request=trigger
xdebug.trigger_value=ppunknown
xdebug.profiler_enable = On
xdebug.trace_format=2
xdebug.output_dir=/www/log/xdebug/将
xdebug
的流量转发到ppunknown.cn
的12348
端口,用于php-xdebug-proxy
进行端口分发
php-xdebug-proxy
PHP实现的类似dbgp的调试流量分发代理
在 ppunknown.cn
服务器上部署 php-xdebug-proxy
主要做以下几件事情
-
监听
12348
端口来自xdebug
的调试信息 -
镜像的
docker-compose
如下:version: '3.7'
services:
xdebug-proxy:
container_name: xdebug-proxy.ppunknown.cn
image: php:alpine
tty: true
restart: always
ports:
- "12348:9002"
volumes:
- ./config:/data/config:ro
- ./project:/www/xdebug-proxy/project
working_dir: /www/xdebug-proxy/project
command: [ bin/xdebug-proxy, --configs=/data/config ]先将项目的config目录复制一份到与docker-compose.yml同级目录
-
根据配置的节点,将流量分发到各节点,配置格式如下
return [
'xdebugServer' => [
'listen' => '0.0.0.0:9002', // 这里使用docker部署,将服务器本地的12348->容器的9002端口
],
'ideServer' => [
'defaultIde' => '',
'predefinedIdeList' => [// 不使用动态注册,所以有多少个人一起调试,就预定义几个idekey,将流量分发到服务器本地的端口上
'ppunknown' => 'ppunknown.cn:9550',
'ppunknown1' => 'ppunknown.cn:9551'
'ppunknown2' => 'ppunknown.cn:9552',
'ppunknown3' => 'ppunknown.cn:9553'
],
],
'ideRegistrationServer' => [
'listen' => '0.0.0.0:9001',// 接受来自ide的dgbp插件的注册信息,这里用不到
],
];注意⚠️:服务器本地的 9550~9553 端口需要打开防火墙放行
最后,需要做的工作就是将服务器的 9550~9553
分别映射到个人的本地端口,为此,需要借助 Frp
进行内网端口反向代理
Frp
frp 是一个专注于内网穿透的高性能的反向代理应用,frp包含frps服务端与frpc客户端,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网
Frp 安装
- [Frp](https://github.com/fatedier/frp/releases)
Frps 与 Frpc 的配置
-
服务端安装frp并配置开机自启 传送门
-
frps.ini
配置以下内容[common]
bind_port = 7000 #监听服务器端口
dashboard_port = 7500 # 管理面板端口,用 https://{host}:{dashboard_port} 访问管理页面
dashboard_user = xxx # 进入管理页面用户名
dashboard_pwd = xxx # 进入管理页面密码
token = jis8491j-9b83-11ec-9df5-00163e02a4b3 # 密钥,客户端进行反向代理时必须配置该token -
个人电脑也需要安装
Frp
, 进入到安装目录,执行./frpc.exe -c xdebug.ini
将端口反向代理到服务器的对应端口 -
xdebug
的配置如下[common]
server_addr = ppunknown.cn
server_port = 7000
token = jis8491j-9b83-11ec-9df5-00163e02a4b3 #与服务器frps的配置一致
[unique_key]#唯一key,随便写,不可重复
type = tcp
local_ip = 127.0.0.1
local_port = 9999 #本地端口,与 NetBeans 的 Debugger Port 一致
remote_port = 9550 #服务器端口
XDebug 插件
浏览器安装 `XDebug` 插件,设置idekey与 NetBeans的 `Session ID` 一致
总结
至此,多人在家远程调试服务器代码的成就达成✌️
参考 & 引用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ppunknown's Hovel!
评论