五、总结

Step-0、背景

写了几年的PHP,一直都用var_dump()进行调试,但是遇到比较复杂的逻辑,很难进行追踪。这期间也用过phpstorm的xdebug调试功能,但每次再重新使用时还得继续查询资料。这里做一个简单的笔记。好记性不如烂笔头。
参考资料如下博客:
http://www.cnblogs.com/lyzg/p/6222111.html
https://blog.jetbrains.com/webide/2011/02/zero-configuration-debugging-with-xdebug-and-phpstorm-2-0/

基本原理:
xdebug进行断点调试的关键在于:xdebug在识别到一个请求需调试的时候,就会用dbgp的协议向remote_host跟remote_port这个地址发送调试请求,当一个位于remote_host上的IDE如PhpStorm正好在监听remote_port这个端口的调试请求时,就能成功接收到调试信息进行调试。

<?php

$debuggingQuerystring = '';

if (isset($_GET['XDEBUG_SESSION_START'])) { // xdebug

$debuggingQuerystring = 'XDEBUG_SESSION_START=' . $_GET['XDEBUG_SESSION_START'];

}

if (isset($_COOKIE['XDEBUG_SESSION'])) { // xdebug (cookie)

$debuggingQuerystring = 'XDEBUG_SESSION_START=PHPSTORM';

}

if (isset($_GET['start_debug'])) { // zend debugger

$debuggingQuerystring = 'start_debug=' . $_GET['start_debug'];

}

$personJson = file_get_contents('http://api.mysite.com/backend.php?'
. $debuggingQuerystring);

$person = json_decode($personJson);

var_dump($person);

Step-5:验证配置信息

  使用phpinfo看一下输出,查看输出里面是否有xdebug的内容。注意,如果之前有配置过比如zend
debugger之类其它的调试工具,需要先从php.ini里面把其它的调试配置去掉,不能同时配置两个调试工具。

威尼斯人线上娱乐 1
威尼斯人线上娱乐 2

  
  
  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

Step-1:安装phpstorm

细节不详说。

www项目代码如下:

Step-8:chrome浏览器断点调试

1、组件安装
Chrome组件断点调试不需要在请求后边手动添加XDEBUG_SESSION_START参数,而是借助浏览器的插件来添加。
威尼斯人线上娱乐 3

2、参数设置
点击右上方的组件按钮,右键点击“选项”进行设置。
威尼斯人线上娱乐 4

3、开启调试模式
威尼斯人线上娱乐 5

威尼斯人线上娱乐 6

Step-7:phpstorm断点调试

1、主动开启PhpStorm对调试端口的监听。
威尼斯人线上娱乐 7

2、找到合适的代码位置打断点。
威尼斯人线上娱乐 8

3、访问对应的请求,并在请求地址后面添加XDEBUG_SESSION_START的参数,如:
威尼斯人线上娱乐 9

XDEBUG_SESSION_START参数的值可以随意写,它的作用在于开启一个http的调试会话。这个会话类似平常的登录会话一样,xdebug会把这个值写到cookie里面去。
威尼斯人线上娱乐 10

只要在http(get或者post)请求中包含XDEBUG_SESSION_START参数或者XDEBUG_SESSION这个cookie中,这个请求就会尝试进入调试环境。只需要在第一次请求调试的时候加上XDEBUG_SESSION_START的参数,接下来一个小时内都不需要再加这个参数。

激活服务端的调试器。(不是必须的)
通过在请求里面带上 XDEBUG_SESSION
参数,并且把参数值设置为之前XDebug里面配置的“idekey”的值,就可以激活服务端的调试。
例如,可以在POST或者GET参数里面加上
XDEBUG_SESSION=PHPSTORM,服务端就会启动调试了。 比如我们要调试
http://www.abc.com/test.php,那么访问链接http://www.abc.com/test.php?XDEBUG\_SESSION=PHPSTORM
就可以启动调试了。

具体的原理是这样的:服务端收到请求后,xdebug会检查参数里面的XDEBUG_SESSION值是否等于“idekey”的值,如果相等,那么就说明需要调试,否则就不调试。这个参数也可以设置在Cookie里面。为了调试方便,可以把下面的两端脚本作为链接收藏到书签栏,每次如果要调试就调用第一段脚本在Cookie里面写入XDEBUG_SESSION参数,如果要停止调试,那么就调用第二段脚本移除XDEBUG_威尼斯人线上娱乐,SESSION参数的值。

如果想要停止调试,只要把调试端口监听关闭即可:

威尼斯人线上娱乐 11

4、访问后就会进入断点。如上面的第二小步所示。

api项目代码如下:

Step-6:配置PhpStorm中的php解释器

  依次点击菜单File-Settings,打开如下菜单:
威尼斯人线上娱乐 12

 
至此,PhpStorm应用xdebug的调试环境就已经配置好了。接下来看看如何使用断点调试,方法主要有两种(step-7步和step-8步)。
   

配置项目相关的path mapping,域名,端口

Step-3:服务端安装xdebug

细节不详说。(PS:用的是公司的开发服务器,一般默认都是安装好了xdebug了。)
安装好后,查看PHP的扩展。
威尼斯人线上娱乐 13

需要修改www项目,把xdebug所需要的触发远程调试的网络请求参数加上:

Step-2:服务器端安装PHP服务

细节不详说。

威尼斯人线上娱乐 14

Step-4:xdebug配置

在php.ini里面加入如下的xdebug配置,配置如下:
威尼斯人线上娱乐 15

上面每行解释一下:

1、
zend_extension:这个配置为xdebug的安装路径,这个根据自己具体的安装的情况填写。

2、 remote_enable:配置为1。
3、remote_host:配置为127.0.0.1或者localhost。
4、
remote_port,这个默认值为9000,如果这个端口被其它进程占用了就需要换一个。所以我换了一个9999。注意,这里的这个端口要和PHPStorm中的设置保持一致,如下图。

5、idekey设置为PHPSTORM,这个字符串在启动调试的时候要用到,后面再解释这个。

威尼斯人线上娱乐 16

六、参考资料

本文主要给大家介绍了关于PHP远程多会话调试的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

curl_setopt($this->ch, CURLOPT_COOKIE, "XDEBUG_SESSION=XDEBUG");
  • 确保调试参数已经转发给api接口
  • 增加同时可以调试的会话数量
  • 开启调试监听,开启服务端Xdebug

四、调试流程

注意:CLI环境的php与fpm的php是否使用的不同php.ini配置文件,需要配置fpm对应的php.ini

威尼斯人线上娱乐 17

二、远程调试配置

https://confluence.jetbrains.com/display/PhpStorm/Simultaneous+debugging+sessions+with+PhpStorm

自有项目可以在通用的网络请求封装类中增加cookie参数:

<?php

class Person {

public $Name;

public $Email;

}

$person = new Person();

$person->Name = "Maarten";

$person->Email = "maarten.balliauw@jetbrains.com";

echo json_encode($person);

威尼斯人线上娱乐 18

威尼斯人线上娱乐 19

网站地图xml地图