一文掌握PHP Xdebug 本地与远程调试(小结)


Posted in PHP onApril 23, 2019

很久没写PHP了、同样很很久没有用XDebug了,近期有个简单的场景要用到,简单记录一下关键步骤。

本地调试

本地环境:

$ php -v
PHP 7.3.4 (cli) (built: Apr 8 2019 10:21:33) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies
  with Zend OPcache v7.3.4, Copyright (c) 1999-2018, by Zend Technologies
  with Xdebug v2.7.1, Copyright (c) 2002-2019, by Derick Rethans

环境搭建

// 安装xdebug
$ pecl install xdebug
// 配置xdebug
$ vim /usr/local/etc/php/7.3/conf.d/ext-xdebug.ini
[xdebug]
 zend_extension="xdebug.so"
 xdebug.remote_enable=On
 xdebug.remote_port=9001
 xdebug.idekey=PHPSTORM
 xdebug.remote_connect_back = 1
// 重启php服务
$ brew services restart php@7.3

IDE 配置

我是在~/Downloads/xdebug/ 目录下放了一个简单的PHP文件test.php来测试,在这个目录下用php -S 127.0.0.1:7790起了个http服务,可参考进行下述配置。

IDEA的几个配置项

一文掌握PHP Xdebug 本地与远程调试(小结)

一文掌握PHP Xdebug 本地与远程调试(小结)

一文掌握PHP Xdebug 本地与远程调试(小结)

开启监听

一文掌握PHP Xdebug 本地与远程调试(小结)

效果演示

设置之后, 在IDE里打上断点, 在浏览器打开这个链接即可开启测试

http://127.0.0.1:7790/test.php?XDEBUG_SESSION_START=PHPSTORM

效果如下:

一文掌握PHP Xdebug 本地与远程调试(小结)

浏览器没有必要安装 Xdebug Helper 插件。

远程调试

与上一篇联动, 本篇是远程调试, 主要记录一下过程

本地环境:

# php -v
PHP 7.2.16 (cli) (built: Mar 10 2019 21:22:49) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
  with Xdebug v2.8.0-dev, Copyright (c) 2002-2019, by Derick Rethans

环境搭建

// 如果没有安装过需要先行安装
# yum install -y php-devel gcc

// 安装xdebug
# cd /usr/local/src
# git clone https://github.com/xdebug/xdebug.git
# cd xdebug
# ./rebuild.sh
// xdebug配置文件
# vim /etc/php.d/xdebug.ini

zend_extension=xdebug.so
xdebug.remote_enable=On
xdebug.remote_port=11955
xdebug.idekey=PHPSTORM
// 重启PHP服务
# systemctl restart php-fpm
# systemctl status php-fpm

然后重点来了,一定不要忘记开放上面配置的xdebug.remote_port端口号,开放此端口号、开放此端口号、开放此端口号。

开放端口每个系统都不太一样,在CentOS7中可以使用firewall-cmd来操作

# firewall-cmd --zone=public --add-port=11955/tcp --permanent
# firewall-cmd --reload

IDE 配置

IDE的配置与本地调试不太一样,总的来说有两种方式,一种是通过在IDE配置Remote Debug, 需要配置登录远端服务器;一种是通过ssh来做远程端口转发到本地来实现类似本地调试的方式。
在这里,我选用了后一种方式来操作。

远程端口转发

// HOST 为远程服务器在~/.ssh/config的配置host名, 可以替换为你的 比如 root@1.1.1.1
ssh -NT -R 11955:127.0.0.1:9001 HOST

这样就实现了远程xdebug端口11955到本地9001的映射。

IDE配置

与本地调试的配置不一样的地方就是host和port,其他地方大同小异。

IDEA-PHP-Servers的配置:

host 为远程web服务的域名, port 为远程web提供服务的端口号。

同时需要注意的是:需要勾选 path mappings, 并正确配置要debug的工程目录在远程和本地两个环境的映射关系。

一文掌握PHP Xdebug 本地与远程调试(小结)

IDEA-PHP-XDebug-DBGp-Proxy的配置:

更改hostport为远程web服务配置,与上一步相同

一文掌握PHP Xdebug 本地与远程调试(小结)

效果演示

设置之后, 在IDE里打上断点, 在浏览器打开这个链接即可开启测试

http://example.com/test.php?XDEBUG_SESSION_START=PHPSTORM

效果如下:

一文掌握PHP Xdebug 本地与远程调试(小结)

同样的,浏览器没有必要安装 Xdebug Helper 插件。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP 表单提交给自己
Jul 24 PHP
php 格式化数字的时候注意数字的范围
Apr 13 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
php缩小png图片不损失透明色的解决方法
Dec 25 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
Jul 28 PHP
PHP在线调试执行的实现方法(附demo源码)
Apr 28 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
关于laravel 子查询 & join的使用
Oct 16 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
Apr 23 #PHP
PHP信号处理机制的操作代码讲解
Apr 19 #PHP
CentOS7编译安装php7.1的教程详解
Apr 18 #PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 #PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 #PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 #PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 #PHP
You might like
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
PHP新手入门学习方法
2011/05/08 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
php基于curl实现的股票信息查询类实例
2016/11/11 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
JavaScript实用技巧(一)
2010/08/16 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
python中子类继承父类的__init__方法实例
2016/12/15 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
人事助理岗位职责
2013/11/18 职场文书
传媒专业推荐信范文
2013/11/23 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang