编写过 C/C++ 等编译型语言的同学都应该会有过这样的调试代码的经历,在可疑的代码行中打一个断点,然后观察相关的变量状态,单步调试,检查程序执行的流程是否和自己设计的一样。
这样才是调试代码的正确打开方式,可是 PHP 这种解析型的语言却没有类似的调试方式,不过幸好有 Xdubug 。Xdebug 是一个开放源代码的 PHP 程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。在本文中,主要介绍下在 VIM 编辑器中使用 Xdebug 的跟踪调试功能。
安装 xdebug
官方安装文档说明:https://xdebug.org/docs/install
方法和安装一般的 PHP 扩展一样
- 先到官网下载和当前 PHP 版本匹配的扩展包
- 将扩展包解压
- 到扩展包里面执行 phpize 命令
- 运行检查工作环境的程序 .configure
- 编译程序
- 安装程序
- 配置 php.ini 配置文件
$ wget https://xdebug.org/files/xdebug-2.5.5.tgz
$ tar -zxvf xdebug-2.5.5.tgz
$ cd xdebug-2.5.5/ $ phpize --with-php-config=path/to/php-config
$ ./configure --enable-xdebug
$ make
$ make install
在文件 php.php 的最后,添加下面内容 zend_extension=xdebug.so
安装 VIM 插件 debugger
下载 VIM 插件,将下载到的文件放到 ~/.vim 目录下即可。这里是一个关于该插件的说明,当你的插件不工作时,可以去阅读下,或许能够解决你的问题。
关于这个插件的安装,在这里还是多啰嗦一下吧。
根据刚才给出的链接,可以下载到一个 VIM 的插件 debugger 的压缩包(debugger.zip)。将它解压,会得到一个 debugger/plugin 的文件夹;里面有两个文件,分别是 debugger.py 和 debugger.vim 。只需要将文件夹 plugin 文件夹复制到 ~/.vim 目录下即可。
注意:
debuger 插件需要用到 VIM 的 python2 的支持,如果 VIM 没有 python2 的支持,该插件是不会有反应的!
可以参考这篇文章,检查你的 VIM 是否支持 python2 。
xdebug & vim 的配置
安装完扩展与插件之后,还需要一些必要的配置才能让它们相互协调地工作。
Xdebug 的配置如下:
[xdebug] xdebug.auto_trace = on xdebug.collect_params = on xdebug.collect_return = on xdebug.profiler_enable = on xdebug.profiler_output_dir ="/php/ext/xdebug_profilers" xdebug.trace_output_dir = "/tmp/ext/xdebug_traces" xdebug.remote_enable = on xdebug.remote_host = 'localhost' xdebug.remote_port = 9100 xdebug.remote_autostart = on
VIM 的配置如下:
" xdebug let g:debuggerPort = 9100 "(该端口必须与xdebug.remote_port相同) let g:debuggerMaxDepth = 5
注意:
Xdebug 中 xdebug.remote_host 的 IP 地址是 VIM 所在主机的 IP 地址;
xdebug.remote_port 和 g:debuggerPort 设置的端口需要一致才行,否则不会工作的。
操作示例
1、打断点
在 VIM 中打开项目的 PHP 代码,在 VIM 的命令行模式下,将光标移动到你需要打断点的代码行,输入以下命令:
:Bp
插件即可在该行代码中打一个断点;
2、启动监听
接下来按下 F5 功能键,启动监听调试事件,并且在 5 秒中之内从浏览器中访问该项目的 URL;
3、访问项目
在浏览器中,在正常 URL 的后面添加多一个参数:? XDEBUG_SESSION_START=1,类似以下的 URL:
http://localhost/xdebug.php? XDEBUG_SESSION_START=1
4、调试代码
在浏览器访问 URL 之后,VIM 会进入调试状态。VIM 窗口会被切割成几部分,最左边的是代码窗口,后边有四个显示调试信息的窗口,分别是监控窗口、帮助窗口、栈窗口和跟踪窗口。
类似下图所示:
在调试的过程中,可以反复利用命令 :Bp
来设置和取消断点。
总结
xdebug & VIM 调试 PHP 代码,虽然是可以跟踪调试 PHP 代码,但体验并没有很好,因为它并不能在调试的过程中实时地打印 PHP 变量的内容。但是,作为跟踪 PHP 代码的运行与调用信息,这种方式还是比较不错的选择!
(完)
本文作者: chenishr
本文标题:《xdebug & VIM 调试 PHP 代码》
本文地址: http://blog.chenishr.com/?p=597
©版权所有,除非注明, 永在路上文章均为原创,转载请以链接形式注明出处和作者细信息。