安装扩展Xdebug

xdebug扩展包有连个地方可以获取到,一个是官网,一个是pecl

选择的扩展版本要考虑四个因素:php版本、编译器版本(Compiler)、系统环境版本(Architecture)、线程安全。主要通过phpinfo()函数来获取。其中,编译器版本与之前一样,vc9,vc11,vc14之类取值,而系统环境有x86和x64之分,这个变量与系统实际版本没有关系,与你安装的服务器环境有关。线程安全就是ts,反之就是nts。

xdebug与一般的扩展不一样。前面的步骤基本一致,添加扩展的库文件到ext目录下,然后修改php.ini配置文件。一般的扩展是添加一条extension=xxx,而xdebug属于zend扩展,我的php.ini(xampp php5.6-vc11-x86)中已经有了xdebug版块(注释了的)。基本配置如下:


[XDebug]
zend_extension = "D:\xampp\php\ext\php_xdebug-2.5.5-5.6-vc11.dll"
;xdebug.profiler_append = 0
;xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 0
;xdebug.profiler_output_dir = "\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "localhost"
;xdebug.trace_output_dir = "\xampp\tmp"
xdebug.remote_mode = "req"
xdebug.remote_port = 9000
xdebug.idekey = PHPSTORM

tip:行首的半角分号或者说英文分号;代表注释。配置环节中注意不要把xdebug.profiler_enable字段错看成xdebug.remote_enable,因为这样之后的流程里xdebug会启动不了。

重启Apache服务器,查看phpinfo()输出信息中(ctrl+f),是否有Xdebug模块。或者命令行php -m | grep xdebug查看是否Xdebug扩展模块是否安装完成。

使用phpstorm + xdebug调试

要求:对PHPstorm配置有一定的了解,不然就算按照教程一步一步配置好也会很懵。

phpstorm本身并不能完成调试工作,需要借助xdebug扩展和浏览器(chrome)扩展来实现。

1. xdebug扩展安装(已完成,略)

2. phpstorm针对xdebug的配置

1).【File】->【Settings】->【Languages & Frameworks】->【PHP】->【Servers】配置如下:

Name:localhost
Host:localhost
Port:80
Debugger:Xdebug

2). 相同路径下,找到【Debug】:
【Xdebug】模块里 的 Debug port: 9000,与一直在php.ini中的配置一致。

3. chrome(或者Fireforx)中XDebog helper插件的配置

1). 下载浏览器扩展(Xdebug helper 1.6.1)
chrome浏览器下载网站-chrome插件详细下载地址

2). 配置XDebug helper插件(chrome 67.0.3396)
chrome扩展列表上,点击【详细信息】->【扩展程序选项】
IDE Key 选择 PhpStrom

4. 使用Xdebug调试的一般步骤:

在phpstorm 中点击工具栏中的类似电话的工具,hover上去会提示start listening for PHP debug connections。点击切换使图标完全变绿,标识已开启。

在工具栏的debug(虫子,具体一点,绿色的七星瓢虫)和run(类似播放标志)前面,有一个可以点击下拉的run/debug configuration工具。里面除了最上面的编辑按钮外,下面的列表都是已经添加好的运行或调试环境。这些环境类型在编辑菜单的defauls里可以看到,包括php web application。点击添加按钮+,添加一条php web application的配置环境。配置如下:

server: localhost (可以下拉选择之前在步骤2中配置好的server,也可以点击...添加新的server)
start URL:/(基于server的起始地址)
Browser: chrome(选择你安装了Xdebug helper扩展的浏览器)

tip: 如何是针对某个文件,可以在起始路径中添加这个调试文件的地址。

配置好后,切换run/debug configuration到相关配置项,在相关文件中加断点(点击文件行号后面的空白处),然后点击debug调试,phpstorm会自动启动浏览器,并打开到配置的start URL,url中附上调试的授权码,类似?XDEBUG_SESSION_START=19406

开启浏览器的XDebug helper插件。直接点击浏览器右上角的debug扩展快速启动,切换到debug,或在浏览器页面ctrl+shift+x快速启动,再点击切换到debug(貌似这快捷键也没多快捷。。)

像index.php入口文件和一些别的框架引入文件都可以正常调试,但是控制器或者说某个接口怎么调试呢?

ci框架中,打开/system/core/CodeIgniter.php文件,搜索call_user_array_func方法,在该方法名所在行添加断点。然后在浏览器点击某个控制器方法,就可以自动跳回到phpstrom中,列出debug内容

相关链接:
Xdebug - Debugger and Profiler Tool for PHP
PECL :: Package :: xdebug

参考链接:
phpstorm+Xdebug断点调试PHP
PHPStorm+XDebug进行调试图文教程
Zero-configuration Web Application Debugging with Xdebug and PhpStorm