vdebug插件

​vim-vdebug/vdebug​​ 用vim-plug下载安装这款插件

具体配置如下

Plug 'vim-vdebug/vdebug'
let g:vdebug_options = {
\ 'port' : 9000,
\ 'timeout' : 20,
\ 'server' : '',
\ 'on_close' : 'stop',
\ 'break_on_open' : 1,
\ 'ide_key' : '',
\ 'debug_window_level' : 0,
\ 'debug_file_level' : 0,
\ 'debug_file' : '',
\ 'path_maps' : {'{serverpath}': '{localpath}'},
\ 'watch_window_style' : 'expanded',
\ 'marker_default' : '⬦',
\ 'marker_closed_tree' : '▸',
\ 'marker_open_tree' : '▾',
\ 'sign_breakpoint' : '▷',
\ 'sign_current' : '▶',
\ 'continuous_mode' : 1,
\ 'simplified_status': 1,
\ 'layout': 'vertical',
\}

# serverpath 替换成远程项目路径
# localpath 替换成本地远程路径
# 其他参数按需自行修改

xdebug插件安装

xdebug地址选择对应版本编译安装即可。以最新版的2.9.5为例子

wget http://pecl.php.net/get/xdebug-2.9.5.tgz
tar -zxvf xdebug-2.9.5.tgz
cd xdebug-2.9.5
phpize
make
maka install

修改php.ini在最后添加如下内容

[xdebug]
zend_extension ="/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so"
xdebug.enable=1
xdebug.remote_enable=1
xdebug.idekey=air
xdebug.remote_port=9000
xdebug.remote_host=192.168.1.14
xdebug.remote_handler=dbgp
xdebug.remote_log=/tmp/xdebug_remote.log

; zend_extension 为xdebug.so文件路径
; idekey 为连接密码自行修改
; remote_port 为连接端口自行修改
; remote_host 为客户端ip地址(最后有详细说明)

测试调试

网站目录下准备test.php

<?php
$a = 1;
$b = 2;
$c = $a + $b;
echo $c;

vim打开​​test.php​​文件添加断点进行调试, ​​F10​​ 添加断点​​F5​​ 开始调试,浏览器打开​​http://localhost/test.php?XDEBUG_SESSION_START=air ``F4​​跳到下一个断点

 

vim调试php_php

关于端口连接问题

左侧为客户端即你本地的编辑器所在的机器

右侧为服务端即php服务所在的机器

如上图所示,客户端发起请求,服务服务端发送DBGP连接至客户端并响应。很多php debug调试失败都是因为DBGP连接上。

大概原理:服务端发起一个DBGP连接客户端。才能完成连接。

服务/客户端能相互访问

这要求服务端客户端都在本地,在一台机器上。或者在一个局域网内,并且内相互ping。或者都是公网ip能相互ping。

这时候php.ini配置的就要改成客户端地址的ip端口。以上是那种情况分别填写localhost,客户端内网ip,客户端公网ip。

我本地是docker环境。内网ip为192.168.1.14,php容器ip为10.0.0.15。只能在php容器内访问192.168.1.14。

连接过程本地发起请求到php容器,容器接收到请求发起连接192.168.1.14的机器(即我vim所在机器的ip)。

vdebug插件在监听本地的9000端口,容器发送连接的请求到本地。被插件监听成功连接。

服务端不能访问客户端

比如般的线上环境。而本即是在公司的局域网下。线上的机器是只能访问公司的公网ip,但是访问不到你这台机器。

1 通过ssh隧道 将线上机器和本地机器的端口打通。这样也能完成DBGP连接

2 修改本地配置使监听本地ip端口改成监听线上ip端口。 这样也能完成DBGP连接

最后建议开发的时候也开着debug,比直接var_dump之类的要方便和高效。可能前几次会不习惯或者慢或者其他原因。但是用习惯后会在一定程度上提高你的开发效率的。