注意本文将要讲的是使用phpstorm和xdebug调试本地php的脚本,例如编写php脚本处理文本、测试程序等,并不是php的web程序。而web程序将在专栏中的其他文章中详细介绍。
环境
- php运行环境安装了xdebug扩展,可以通过
php -m | grep xdebug
检查是否安装成功; - 安装phpstorm(有条件建议购买正版,支持正版);
Xdebug调试
- 首先在phpstorm编写脚本:
<?php
namespace test;
class TestClass
{
public $test_attr1;
private $test_attr2;
public function __construct($test_attr1, $test_attr2)
{
$this->test_attr1 = $test_attr1;
$this->test_attr2 = $test_attr2;
}
}
$test = new TestClass('a', 'b');
echo $test->test_attr1;
exit;
- 从菜单栏
Run->Edit Configuations
进入运行环境的配置窗口,点击窗口左上角的+
号,选择PHP Script
:
- FIle栏点击右侧的选择按钮,选择当前脚本,点击确认,然后点击
Apply->OK
确认配置:
- 成功之后工具栏上会出现一个名为
Unamed
的运行配置,旁边的运行和调试按钮可以点击:
- 现在可以在代码左侧的行号旁边设置断点调试程序啦:
One More Step
在本地调试模式下,是不需要配置任何参数的。因为phpstorm这个IDE帮我们做了很多事情。
该模式下调试的原理图如下:
可以将整个过程都看做在phpstorm里面进行的。对这个流程,我的理解如下:
- 点击Debug按钮,触发调试过程,phpstorm会调用php命令执行脚本,并根据phpstorm的配置指定若干xdebug参数,这一点可以在启动调试后的
Console
窗口看到:
在这个命令里指定的参数有:
- remote_enable:启动远程调试
- remote_mode:指定调试模式
- remote_port:指定调试端口
- remote_host: 指定调试host ip
这些参数将在后续的Xdebug文档中详细介绍。
最关键的是指定了host ip(127.0.0.1)和port(9000)。Script调试下,host ip应该是本机,而port(9000)是在phpstorm的配置里设置的,可以更改,在后续的remote debug模式下,特别需要关注这个设置。
无论你在php.ini里有没有设置xdebug参数(remote debug模式的常用手法),这里命令行将会覆盖这些参数的设置。也就是说会以这里指定的参数为准。
这样也就不难理解了,接下来:
2. php脚本执行的生命周期开始,由于php安装了xdebug扩展,xdebug会按照命令行指定的参数配置(127.0.0.1:9000)去请求9000端口;
3. 此时的9000端口正被phpstorm实现的xdebugclient监听,自然被它接收到了,之后就在phpstorm中触发了调试过程,一步一步调试,直到最后,这一点,可以在调试状态下查看9000端口得知:
4. 调试结束后,所有链接都断开,php生命周期结束,phpstorm的xdebugclient也停止对9000端口的监听;
OK,到这里,本地的scrip调试就弄得差不多了。虽然这种用法不常见,但对于我们了解phpstorm+xdebug的工作原理是很有帮助的。
感谢阅读~