本地用xdebug远程调试mgtdev2服务器的项目

调试代码的时候 我们一般都是直接echo/var_dump/或者log的形式来调试。

如果代码很复杂 变量很多 输出的时候内存爆了 直接500错误。

对于这种大数据的情况 用xdebug来调试会方便些。

测试环境

  • 服务器: ubuntu + php7.1 + xdebug

  • 客户端IDE:  sublime text3

  • 调试的项目域名:http://zou-m2-ee.mgtdev2.iggo.fi

  • 调试的项目服务器上路径:/var/www/zou-m2-ee.mgtdev2.iggo.fi

  • 调试的项目客户端IDE里的路径:/Users/zouhongzhaoo/Documents/code/project/zou-m2-ee.mgtdev2.iggo.fi

服务器端xdebug配置

先安装xdebug,自己去谷歌下怎么安装,一般是
apt-get install php71-xdebug

修改xdebug.ini文件

vim /etc/php/7.1/mods-available/xdebug.ini

改成

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_log=/var/log/php-xdebug.log
xdebug.remote_port=9001
xdebug.idekey="PHPSTORM"

参数说明:

xdebug.remote_enable  1就是启用,0就是禁用

xdebug.remote_autostart 默认是false。为1就是自动触发

xdebug.remote_handler = dbgp 调试器协议,默认就是dbgp,并且只有这一个选项。

xdebug.remote_host = 127.0.0.1 远程主机,也就是客户端的ip,默认是本地服务器ip localhost

xdebug.remote_log = 默认为空,定义调试日志路径

xdebug.remote_port = 9001 默认为9000,远程主机端口,也就是xdebug服务器端口,IDE客户端的端口也要设置一样,都是9001。

xdebug.idekey = "PHPSTORM",默认为*complex*,这个是IDE专用的 用来传密钥给DBGp处理协议,因为IDE都有内置的xdebug客户端,IDE里启动xdebug调试时 会打开本地的9000端口,然后把idekey传给远程服务端的DBGp处理协议。所以客户端的idekey要跟服务端的ideky一致才行,不然不匹配就调试不成功。

注意: xdbeug只需要这几个配置就行,不要加其他配置了,免得有问题。
更多参考见官方文档
https://xdebug.org/docs/all_settings
保存后,就重启下nginx和php-fpm

客户端IDE设置

我是在mac下安装的sublime text3编辑器,简称为IDE。

因为要连远程服务器,所以需要安装sftp和xdebug这2个插件。

sftp用来连接远程服务器,下载代码到本地

xdebug用来调试,在代码里加断点来调试

具体怎么安装自己百度即可。

好了,现在重头戏开始了,对IDE进行设置。

1,先创建一个project,也就是工程,注意一个网站对应一个工程。

比如我调试的是http://zou-m2-ee.mgtdev2.iggo.fi这个网站,那么就先创建改项目目录

/Users/zouhongzhaoo/Documents/code/project/zou-m2-ee.mgtdev2.iggo.fi

自己手动创建即可。

然后把目录添加为工程

并且执行 项目=>项目另存为

2,编辑存储后的project文件

改成

{
    "folders":
    [
        {
            "path": "/Users/zouhongzhaoo/Documents/code/project/zou-m2-ee.mgtdev2.iggo.fi"
        }
    ],
    "settings": {
        "xdebug": {
            "path_mapping": {
               "/var/www/zou-m2-ee.mgtdev2.iggo.fi/" : "/Users/zouhongzhaoo/Documents/code/project/zou-m2-ee.mgtdev2.iggo.fi/" 
            },
            "url": "http://zou-m2-ee.mgtdev2.iggo.fi",
            "ide_key": "PHPSTORM",
            "super_globals": true,
            "close_on_stop": true,
            "port": 9001,
            "debug": true
        }
    }
 
}

注意这里的path_mapping很重要,前面是服务器里的路径,后面是本地IDE客户端的路径。要一致才行。

ide_key 和 port 都要跟服务器端的xdebug一致。

这里的url就是你要调试的页面,我这里是调试的首页。如果你要调试其他页面,比如分类页面test.html。那么就改成

http://zou-m2-ee.mgtdev2.iggo.fi/test.html

3,给该项目设置sftp

右键 -> SFTP/FTP ->Map to Remote

4,从远程服务器下载文件,加断点进行调试

比如首页,就把pub/index.php的代码下载下来

$app = $bootstrap->createApplication(\Magento\Framework\App\Http::class);

这行代码加断点

选中这一行,鼠标右键



开始调试

Tools -> Xdebug -> Start Debugging (Launch Browser)

编辑器下面就会出现xdebug的终端界面

但是你会发现目前还是不行,一直没有输出。

这是因为xdebug里remote_host里是127.0.0.1,不是你客户端IDE所在电脑的ip,所以无法识别你的xdebug请求。

那么是不是把remote_host改成你的电脑ip就行了呢? 不行的,因为你电脑的ip是共享ip,不是独立ip,被运营商(电信/移动/联通)限制了,导致服务器端xdebug无法通过这个共享ip找到你本机地址,进而没有数据传到你的IDE,就不会输出。

这个时候,需要用到ssh 隧道,在你的终端里执行

ssh -R 9001:localhost:9001 用户名@服务器ip

也就是把本地9001端口挂载到服务器的9001端口上。

这样的话 服务器就能通过9001端口找到你IDE客户端本机地址了,然后给客户端本机传数据,最后IDE里就有输出了。

所以这个ssh隧道不能断,要一直连着,如果你电脑关机了或者睡眠了,就要重新连接下ssh。

windows里的ssh隧道用putty.exe工具来连接,具体的参考

https://www.jetbrains.com/help/phpstorm/remote-debugging-via-ssh-tunnel.html

你Stop Debugging后,在Start Debugging (Launch Browser),等个几秒钟,就会出现数据了

参考文献:

https://www.jetbrains.com/help/phpstorm/remote-debugging-via-ssh-tunnel.html

https://blog.csdn.net/autoliuweijie/article/details/80283689

https://xdebug.org/docs/all_settings

http://guojianxiang.com/posts/2015-09-06-PHP_Debug_Tool-Xdebug.html

后记

如果你是用的PHPSTORM编辑器,那么设置更简单,自行百度即可。

如果你的本地ip是公网独立ip,也就是说没有被运营商限制,那么就不需要ssh隧道这么复杂。直接修改下服务器的xdebug.xml

xdebug.remote_host=127.0.0.1

改成

xdebug.remote_host=你的本地电脑公网ip

再加一个

xdebug.remote_connect_back=1

也就是直接把调试数据传给公网ip

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值