在咱们开发过程当中。咱们若是常常性的echo、dump效率很低。因此咱们就可使用xdebug进行断点调试。php
下面的教程以 Windows 操做系统为例子。其余操做系统相似。nginx
安装xdebug前,请肯定本身的php版本和使用的TS或NTS。若是实在不清楚,能够经过如下方式查看git
如上图,第一个红框就是如今使用的php的版本,github
第二个框就是你使用php编译的X86仍是X64.web
第三个是表示加载的php.ini的位置。咱们会用到,后面须要改php.ini。就是改这个位置。必定不能改错了。apache
第四个框,就是Thread Safety 若是是 diabled 就表示咱们用的PHP是NTS的。若是是enable 就表明是TS的。待会选择xdebug的时候就会用到上面的信息。api
下载地址:https://xdebug.org/download.php浏览器
根据咱们上图的信息,咱们选择的应该是php7.1 x86 nts的 xdebug拓展服务器
32bit 就是32位操做系统。也就是x86. 若是后面没有写TS ,就表明这个拓展是NTS的。不要选错了。php7
将咱们上面下载好的拓展移动到 php 的 extension_dir 的目录。若是不知道本身的拓展目录在哪。仍是能够经过phpinfo
查看
搜索 extension_dir 就是拓展所在的目录。
打开 php.ini php.ini 的位置。经过**phpinfo()**中进行查看。 以避免改错位置。
在后面加上一下配置
[Xdebug]
;拓展的位置。这里必定要zend_extesion zend_extension="php_xdebug-2.7.0alpha1-7.1-vc14-nts.dll" ;启用性能检测分析 xdebug.profiler_enable=on ;启用代码自动跟踪 xdebug.auto_trace=on ;容许收集传递给函数的参数变量 xdebug.collect_params=on ;容许收集函数调用的返回值 xdebug.collect_return=on xdebug.remote_enable=1 xdebug.remote_handle="dbgp" xdebug.remote_mode="req" xdebug.remote_host="localhost" ;端口 能够本身更改,不要冲突,待会须要用到 xdebug.remote_port=9002 xdebug.idekey="PHPSTORM" xdebug.collect_includes = 1 xdebug.remote_autostart = 1 ;指定堆栈跟踪文件的存放目录 xdebug.trace_output_dir="D:/debug" ;指定性能分析文件的存放目录 xdebug.profiler_output_dir="D:/debug" xdebug.profiler_output_name = cachegrind.out.%t.%p
验证Xdebug。一样使用咱们的 phpinfo
进行验证。记得改完配置,记得重启apache或者nginx 或者其余的web服务器
搜索xdebug。 看到上面的界面就是配置成功了。而后再检查上面的配置是否是和你设置的一致。
settings -->Languages Frameworks ---> PHP
点击红框内的 ...
先点击下图的 + 添加一个新的cli 。
点击 ... 选择你的php.exe的位置。 这个php 必定是你的web用的。跟咱们配置Xdebug的要同样。
选择了以后,底下就会检测到咱们的php的版本,和xdebug版本以及php.ini的配置。若是这里的信息和咱们phpinfo 看到的不同,就要检查下,是否是选择的php的版本不对。
settings -->Languages Frameworks ---> PHP --->Debug
更改红框中的端口为咱们在php.ini中的配置的端口。咱们在php.ini配置了9002.因此这里也要写上9002.不要写错了。不然就会有问题。
红框中的配置。按照咱们在php.ini中的配置进行填写。
xdebug.idekey="PHPSTORM" xdebug.remote_host="localhost" xdebug.remote_port=9002
而后本身本地须要debug的host 、 端口
点击菜单栏中的run。 而后点击edit Congiurations
在出来后的选项中,点击 + 而后选择 PHP Web Page
选择你刚才 添加的 server 以及起始的web地址。 点击 apply 应用
点击下图中的这个小电话的图标。 让你变绿色。
没有监听的状态
正在监听的状态
在咱们须要调试的代码处,咱们须要加上一个断点,而后程序运行到这个地方,就会停下来。下面以TP5为例子。
而后咱们运行咱们的项目。就会发现浏览器卡住了,这个时候,咱们打开PHPstorm。就会发现。程序停下来了。
咱们能够很清晰的看到上下文的变量的值。以及框架的执行的流程。这对咱们分析一个框架,是颇有帮助的。
而后咱们能够进行单步调试,或者步入、跳出等操做
图中,全部画红圈的就是经常使用到的工具。其具体功能介绍以下:
此工具,点击后,当前调试全部变量所有销毁,从新开启一轮请求。即如同刷新页面。
此工具点击后,继续 Laravel 生命进程的路程,直到下一个断点,暂停
此工具,中止调试,结束 Laravel 周期。
变量栏标签,下面的内容是当前调试位置全部可以用到的变量(包含全局和局部),记住能用到就会显示
此工具的做用是当调试行文件关闭了,或者代码视图跑到其它位置了,点击它,就能从新定位到调试文件以及调试行
此工具的做用是当调试行代码有调用函数,包含文件,new 新对象时,可以不进入相应函数、文件、类中,直接返回其调用的结果,在当前行中,执行下文
此工具功能正好和上面的相反,即进入和强制进入当前调试行将要调用的函数、方法、包含的文件、new的新对象类文件中,执行相应代码
跳出正在执行的函数、方法、包含的文件、new 新对象的类文件,至调用行,并继续执行调用行下面的代码