参考链接:https://blog.youkuaiyun.com/21aspnet/article/details/54808850
安装 Xdebug 模块
- 复制 phpinfo() 输出的的所有内容;
- 粘贴到 https://xdebug.org/wizard.php 的文本域内;
- 点击按钮
Analyse my phpinfo() output
。 - 系统会推荐一套安装方案,下载推荐的 .dll 放到
php\ext
目录, - 最后在
php.ini
新增行(首行根据实际情况编辑):
[Xdebug]
zend_extension = e:\xampp\php\ext\php_xdebug-2.6.0-7.2-vc15.dll
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "C:\Users\Administrator\Desktop\tmp"
xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = on
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.trace_output_dir = "C:\Users\Administrator\Desktop\tmp"
xdebug.idekey = PHPSTROM
- 重启 php 服务。
使用 Xdebug 调试
- 进入 PhpStorm,勾选
View->ToolBar
; - 点击
Run
/Edit Configurations...
,点击加号+
,选择PHP Web Applicatoins(Page)
创建调试,Name
的值随便,对于Server
的值,点击旁边的...
按钮浏览,点击加号+
新增,Name
的值随便,Host
输入要测试的主机域名(例如localhost
),Port
端口号默认是80
,Debugger
选择Xdebug
,点击确定。 Start Url
填写要测试的地址,Bowser
选择调试用的浏览器,点击确定。- 在程序中打断点(快捷键
F9
)。 - 点击工具栏上的开始调试按钮(瓢虫样式的按钮),程序将走到断点处暂停运行,此时可以观测代码区域内各个变量的值。
- 可以自己选中变量拖入右下方的 watches 进行特别观察,也可以在那里输入变量名添加要观察的变量。
- 关于调试按钮的快捷键,如想设置成 Visual Studio 的模式,可以到
View
/Quick Switch Scheme
/Keymap
选择Visual Studio
。 - 如果断点无效,查看浏览器控制台
Application
/Cookies
/(网址)中的键值对,按浏览器地址栏中的XDEBUG_SESSION_START
的值,新增键值对:XDEBUG_SESSION
->13228
,之后刷新重试。
Xdebug 工作原理
参考文档:https://blog.youkuaiyun.com/wang740209668/article/details/50588557
- xdebug 可以控制 PHP 程序的执行,这意味着 xdebug 可以在任何时候暂停或者恢复正在运行的 PHP 程序。
- 当 PHP 程序被暂停的时候,xdebug 可以获取到程序的相关信息,比如变量的值等。
- xdebug 也可以修改一个变量的值,然后再恢复暂停的程序,让其继续运行。
- xdebug 配合 IDE 进行可视化调试的过程(类似于 Visual Studio 单步调试)被称为“远程调试”,是因为调试时有一个 Server(xdebug) 和一个 Client(IDE),所以在调试的时候,被调试的 PHP 程序和调试 PHP 程序的 IDE 可以不在同一台电脑上。
- xdebug 在进行远程调试的时候扮演一个 Server 的角色,它会在一个指定的端口(默认是9000)等待 IDE 的连接。目前有2种通信的协议,GDB 和 DBGp,其中 DBGp 是 DBG 的取代协议。
- IDE 在执行调试的时候,给 xdebug 发送需要执行的命令,xdebug 接受到命令后执行,然后将执行的情况和获得的 PHP 程序运行信息返回给IDE。现在很多 IDE 都实现了与 xdebug 通信的协议,比如 Eclipse PDT。
- Xdebug远程调试有2种方式:
- req:在 PHP 程序开始执行的时候,xdebug 与 IDE 建立连接。
- jit:在 PHP 程序执行到断点处或者遇到 Error 的时候,xdebug 才与 IDE 建立连接。
- 开启 xdebug 远程调试需要通过 GET, POST 或是 cookie 的方式传入一个
XDEBUG_SESSION_START
变量,XDEBUG_SESSION_START
变量的值代表一个 session 的名称。通过这种形式,xdebug 可以分辨出不同的 session。如果要结束一个 session 可以通过同样的形式传入一个XDEBUG_SESSION_STOP
。