Xdebug的安装、配置和使用
对于我这么一个渣渣php码农,平时总觉得echo、var_dump、print_r就能满足我的调试需求了,最近公司开始一个新项目,要大量阅读调试旧的源码,echo和var_dump开始不够用了,于是装了一下xdebug扩展,配合phpstrom使用,效率啪啪啪往上涨,后悔用晚了,下面就如何安装和使用xdebug做一个简单的说明介绍。
1、什么是Xdebug?
Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。
2、如何下载安装Xdebug?
(1)下载
官网下载地址:https://xdebug.org/download.php
我们可以根据自己使用的php环境包括php版本、操作系统等选择好适配的版本扩展
![](http://upload-images.jianshu.io/upload_images/2865141-0e46b8c6a46d4f26.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(2)安装
对于win环境下开发的用户来说,一般使用的都是wamp或phpstudy这样的集成环境,我们只需要把dll(动态链接库)文件放到你的开发环境php对于版本下的目录即可,不过一般都会有内置xdebug.dll,如果没有的话,那就需要自己动手了。
例如,在phpstudy中,所有dll扩展防止的目录都是在对应的php版本目录下的ext文件夹,如图所示:
![](http://upload-images.jianshu.io/upload_images/2865141-140e57649fdf1079.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
对于Linux用户来说,则要下载源码包就行编译安装了
tar -xvzf xdebug-2.1.2.tgz
cd xdebug-2.1.2
phpize (如果phpize没有这个command,需要安装一次phpize。phpize可以让php支持扩展模块)安装phpize:sudo apt-get install php5-dev
如果安装了继续进行下面命令
./configure
make
make install
cp modules/xdebug.so /usr/lib/php5/20090626+lfs将xdebug.so文件移到php5下面
3、配置php.ini
对于win的用户
![](http://upload-images.jianshu.io/upload_images/2865141-26302b8c7543e7e4.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
profiler_开头的配置项是xdebug的输出数据相关配置
Profiler_enable很明显表示是否启用xdebug的输出数据到文件中
Prifiler_output_dir是xdebug输出数据文件的目录
Remote开头的几个配置项也注意设置好
Dll文件的位置也要确认正确无误
对于Linux的用户
配置项和内容也是大同小异,不过引入扩展文件应该是.so后缀的
4、重启apache或nginx
win下的集成环境注意启用扩展
5、我们在根目录下写一个index.php,内容如下:
<?php phpinfo(); ?>
访问localhost
![](http://upload-images.jianshu.io/upload_images/2865141-db1b7f8a903aea68.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我们可以看到xdebug的相关配置,特别注意的是一个port的设置
![](http://upload-images.jianshu.io/upload_images/2865141-df90f683fc1885dc.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
记住端口号,我们在下面配置phpstrom的xdebug时会用到,假如你的9000端口被其他软件应用所占用,要么关掉其他占用了9000的进程,要么重置xdebug的端口号,但建议还是采取第二种方式。
6、配置phpstrom的xdebug
(1)打开File -> Settings
![](http://upload-images.jianshu.io/upload_images/2865141-ad5fb3f3ecb3a768.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(2)在Settings中搜索xdebug,检查端口号是否与我们刚才phpinfo()中显示的配置相同,改好注意apply
![](http://upload-images.jianshu.io/upload_images/2865141-2a99e9e19d8b5713.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
(3)添加php web application
点击Edit Configurations进入配置,下面的localhost和hezubao是我已经做好的配置
![](http://upload-images.jianshu.io/upload_images/2865141-bfb8f17a43064652.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
添加server站点
![](http://upload-images.jianshu.io/upload_images/2865141-4e1ef428e6fa01e1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Name是我们xdebug的配置名称
Server是站点配置
Start URL是站点入口
![](http://upload-images.jianshu.io/upload_images/2865141-847602fec31918e6.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/2865141-98d18a0d785f0a9f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
配置好后,apply
7、调试使用
往事具备,现在我们来尝试使用一下,在上面的配置中,我将localhost的入口设为xdebug.php,现在在localhost的根目录下新增一个php文件,编辑内容如下:
![](http://upload-images.jianshu.io/upload_images/2865141-c1bf99cbc7945f89.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我们设置第七行为断点,则代码执行到第七行出会挂起暂停下来
![](http://upload-images.jianshu.io/upload_images/2865141-a62367c7b6b2f3d7.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
现在我们点击那个甲虫按钮,就开始xdebug调试了
![](http://upload-images.jianshu.io/upload_images/2865141-bf9290d27f8d7fe9.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我们可以看到跳转的网页一直都是正在加载的状态,说明代码确实执行到某个地方挂起了
![](http://upload-images.jianshu.io/upload_images/2865141-b2fd5ad8c1634544.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
现在我们回去看看phpstrom,左下方有输出程序代码中变量的值
![](http://upload-images.jianshu.io/upload_images/2865141-dd9c3325da7d132a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
下面我们可以使用Step Into的按钮单步调试我们的程序,调试过程中程序中的变量会不断显示在变量输出区域,如下图所示:
![](http://upload-images.jianshu.io/upload_images/2865141-179bc27ffa31fade.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/2865141-7a9d5f8ad3896039.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
8、Xdebug的其他作用
很明显,有了xdebug我们不再需要在代码调试时对一些关键变量一个一个echo或var_dump了,而且我们可以使程序运行到断点时挂起,从而更加精确地锁定出bug的代码的位置。同时Xdebug具有追溯代码的跟踪回溯功能,这样在一些大型的程序的中,即使调用逻辑很复杂,我们也能顺蔓摸瓜一步步到达错误发生的地方。
除此之外,我们可以使用xdebug_time_index()来显示脚本运行时间;可以使用xdebug_memory_usage()来测定脚本占用内存;同时我们还可以查询xdebug的输出日志来查询程序运行的相关信息。
![](http://upload-images.jianshu.io/upload_images/2865141-08efc0c41f81b3a0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/2865141-254ad9cbbcb2f2e0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)