在Windows的XAMPP上使用XDebug和Sublime调试PHP

如何在PHP上使用断点除错?
xdebug + remote debugging + one of the supported clients
这边我的clients选sublime的XDebug Client插件

Windows 7上装的XAMPP要怎么开启XDebug?
其实在你的D:\xampp资料夹下有文档activate-use-xdebug.pdf,
或直接开启
http://localhost/dashboard/docs/activate-use-xdebug.html

文档中有要你安装 WinCacheGrind去调试,装了后不会用+介面太丑。放弃

打开D:/xampp/php/php.ini,加入以下配置

[XDebug]
zend_extension = "D:\xampp\php\ext\php_xdebug.dll" =>使用xampp的xdebug时要这样写,配置extension=php_xdebug .dll无效
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir =“D:\ xampp \ tmp”
xdebug.profiler_output_name =“cachegrind.out。%t-%s”
xdebug.remote_enable = 1
xdebug.remote_handler =“dbgp”
xdebug.remote_host =“127.0.0.1”
xdebug。 remote_port = 9000
xdebug.remote_log =“D:\ xampp \ xdebug_log”

重启Apache

打开phpinfo()后会看到

 

表示PHP的XDebug配置成功

安装sublime XDebug Client
直接Package Control搜寻XDebug Client安装

配置Sublime
要调试某一个项目,首先得把这个项目在sublime下保存成一个project (一直都有这习惯)
sublime->project-> save project as ...

接下来配置专案
sublime->project->edit poject

设定档类似以下内容:
{
"folders":
[
{
"path": "."
}
], "settings": { "xdebug": { "url": "http://test.localhost/", } } } 其中url是专案所在url,记得在hosts里头将这个url指向127.0.0.1,还有在apache的virtualhost里将其指向专案根目录 这样就OK了,准备开启调试吧开启调试

开启调试方式也比较简单,在想要加中断点的地方右键
xdebug->Add/Remove breakpoint
这样专案在运行到本行的时候就会停止下来
然后开始调试,在功能表列选择
tools->xdebug- > start debugging( launch browser )
sublime会自动打开浏览器,进入配置时写的网站连结,进行调试

可能问题
无法跟踪中断点
这可能是xdebug埠被占用,按Ctrl+`或者功能表列View->show Console查看错误资讯,有可能是xdebug埠已经被占用的缘故。

我遇到的状况是
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Bear\\AppData\\Roaming\\Sublime Text 3\\Packages\\Xdebug Client\\Xdebug.sublime -settings' 
error: CodeFormatter
原来  C:\Users\Bear\AppData\Roaming\Sublime Text 3\Packages\Xdebug Client没这个目录,手动新建目录后,Preferences => Package settings => Xdebug =>Setting - Default储存才能看到Xdebug.sublime-settings被存到正确的位置。Xdebug.sublime-settings我用预设值,没特别配置

Ethan的XDebug 
http://blog.xuite.net/ahdaa/blog1/42909643-%5BPHP%5DXdebug
Ethan配置的XDebug有像这篇一样,在画面上显示堆叠,不过我觉得Sublime XDebug Client更好用,就不研究这篇了

在command line ( CLI )上调试XDebug + Sublime 
https://github.com/martomo/SublimeTextXdebug/issues/3 
Xdebug.sublime-settings和  *.sublime-project不用动
打开xampp的console,输入
Windows 
set XDEBUG_CONFIG="idekey=sublime.xdebug" 
php myscript.php 
UNIX 
export XDEBUG_CONFIG="idekey=sublime.xdebug" 
php myscript.php

下面这行没设断点,但也会跑进去,连跑两次,第二次XDebug会crash掉
$this->oDB = &A::singleton( 'db', $aDBO );
&拿掉,改成
$this->oDB = A::singleton( 'db', $aDBO );
正常

注意:不能打开cygwin,因为cygwin的php没有配置XDebug,可用php -m检查
注意:ubuntu的cli和fpm的php.ini是分开的,要在CLI除错记得cli的php.ini也要加入xdebug的配置

Debug时观察变数
所有的变数都在Xdebug Context面板中
如何像chrome开发者工具的console一样,观察现在的变数?
右键=> XDebug => Set Watch Expression或Edit Watch Expression
然后在XDebug Watch面板中看结果

Debug时运算变数
如何像chrome开发者工具的console一样,在断点时运算变数(更改变数的值)?
(进入断点)ctrl+shift+p =>执行XDebug: Session - Evaluate =>输入框输入PHP代码。ex. $test= "123"; => ctrl + shift + F5 ( XDebug: Breakpoint - Run ) 
这样子就会将$test的值改为"123"后往下跑

防止在Notice、Strict standards、Deprecated时被中断(break) 
Xdebug.sublime-settings( Setting - Default ) break_on_exception 注解掉  "Notice"、"Strict standards"、"Deprecated" 

使用start debugging(launch browser)后网页转不出来
这是目前比较无解的一个情况,在使用CLI debug或要切专案debug时,常常发生start debugging(launch browser)打开浏览器后,网页疑似被断点转不出来,但sublime却没进断点,无法继续往下跑的现象
Sublime console ( Ctrl+` )报错:
File "xdebug.helper.helper in C:\Users\User\AppData\Roaming\Sublime Text 3\Installed Packages\Xdebug Client.sublime-package", line 45, in base64_encode
UnicodeEncodeError: 'ascii' codec can't encode characters in position 381-384: ordinal not in range(128) 
目前只能重开机去解这个问题。(一旦要换专案或cli时,就很容易发生这个问题)
改用sublime text 2的Xdebug Client
这个老外也有同样的问题
https://github.com/martomo/SublimeTextXdebug/issues/98 

参与评论