PHPStudy+PHPStorm配置XDebug调试
本文最后更新于 918 天前,其中的信息可能已经有所发展或是发生改变。

属于var_dump()的时代结束了。

大二就想配置XDebug了,奈何自己是懒狗,靠var_dump()echo()行天下。最近代码审计还是要用上Debug,于是自己根据网上的教材,好好的摸索一下。参考了很多博客和文档,有一部分的操作是多余的,还有一些是更新了不再使用的,这里做了一些总结,希望可以帮助看到这篇博客的人。

XDebug是如何工作的?

IDE结合XDebug调试原理

  • IDE行为:打开本地端口(XDebug 2.X默认为9000,3.X默认为9003)进行监听;同时做好路径映射,将本地的项目与远程服务器的项目目录做一一映射。
  • 浏览器行为:向服务器发起请求,Headers中带上Cookie:XDEBUG_SESSION=IDEKEY
  • 服务器行为:检测到Cookie,挂起PHP解释器,等待进一步请求;同时获取请求的来源地址,发起对对方端口(此端口与监听端口一致)的访问,建立调试连接。
  • IDE行为:发现有调试连接建立,判断XDEBUG_SESSION是否为预设的IDE key,如果是,双方协商,进入调试状态。

为什么Debug这么难?

习惯了Pycharm和CLion的直接虫子Debug,可能对PHP为何如此难用Debug感到困惑,这里借了Clang佬的一张图(来自某年XMAN):

可以看到整个流程中存在三方角色:本地的负责调试客户端的PhpStrom,提交请求触发调试的浏览器(例如Chrome)以及安装了XDebug等待被调试PHP服务器Apache/Nginx等(这部分在Windows下使用PHPStudy实现)。三者都存在于本机中,于是会使人产生了在本地调试的错觉。其中最大的区别是php解析器是被apache/nginx等中间件调用,phpstorm需要经过中间件与调试的php代码进行通信,本质上是一种远程调试,而XDebug就是实现的插件。

XDebug下载安装

XDebug的官网:https://xdebug.org/

具体XDebug下载链接:https://xdebug.org/download,这里选择适合自己的版本下载。

至于如何选择适合自己的版本?可以根据自己环境下phpinfo()的输出的操作系统、PHP版本等具体信息选择版本,也可以直接使用这个链接https://xdebug.org/wizard.php,将你输出的phpinfo()信息粘贴到文本框,根据你的phpinfo信息来帮助你判断适合的版本,懒狗必备。

php.ini配置

于是将下载下来的dll文件移动到phpstudy下的\Extensions\php\php7.3.4nts\ext目录中。

然后就可以修改php.ini配置,这里的配置文件直接在php目录下

idekey设置与Cookie值和PhpStorm中Server值相同,这部分后面还会配置。

重要的其实只有下面三条,端口配置9000,注意不要跟WEB服务冲突;host本地,以及开启debug模式。

注意这里3.X版本与2.X版本配置xdebug的方式不一样,怎么个不一样法?如果你在3.X版本使用2.X的配置,效果大概会如下:

而2.X也是网络上大部分博客的通用用法,在3.X中,这种配置Xdebug的方式已经被废弃。务必使用正确的方式来配置,否则Debug不会生效。

其他属性:remote_autostart如果选择了On,则默认开启Debug模式。在这种情况下,不管你有没有提交Cookie,都是会开启Debug的。

接着在phpstudy的网站管理页面也打开php扩展的debug模式:

至于这里为什么有两个xdebug?因为最新的phpstudy的php扩展本身就自带了xdebug,不用再去下载新的。

然后重启服务器,访问phpinfo,可以看到已经有Xdebug了。

PhpStorm开启监听

PhpStorm的配置不用做太大的变化,默认也是开启了Debug的,匹配一下端口就行了。

这里设置监听的服务器信息(但是不设置好像也能监听):

Debug → DBGp Proxy,这里是设置IDE key以及监听host和port信息的,这里注意和php.ini的属性保持一致即可。

这些属性检查一下,和php.ini一致即可,然后设置Configuration:

最后打开右上角的听筒,开启监听模式:

浏览器插件 —— Xdebug Helper

上面已经说到了,服务器在收到请求信息时,会判断请求信息是否是请求调试信息,用来确认核对信息的属性就是Cookie:如果Cookie是设置的IDE Key的值,则匹配成功进入调试模式。

我们的浏览器有两种请求方式:在请求时设置Cookie;或者安装Xdebug Helper插件,每次请求时默认带上Cookie。

Xdebug Helper在大多数主流浏览器中都有支持,下面以Google浏览器作为示范。

设置IDE Key:

调试

终于万事俱备,只欠东风,在示例代码中设置断点。

开启IDE监听模式,在浏览器中启用Xdebug Helper,请求本地:

此时已经获取到调试信息,注意这里的点不能断太久,否则会被判定为500即服务器错误,这也是区别于其他IDE的地方,至于Debug方式,与其他JB家的IDE相同,就不再赘述。

同时如果你检查浏览器的Cookie,是可以看到提交的Xdebug_SESSION=PHPSTORM的,意味着你手动提交改参数的方式(例如使用postman或者burp)与浏览器插件效果相同。

QUESTION:调试过程500怎么办?

这种情况通常由调试时间过程,连接中断导致,phpstudy默认最长连接时间为60秒,超出之后返回500。

如何修改?具体可以参考这篇文章:

https://my.oschina.net/lylyg/blog/4315320

参考

由于自己对这方面的配置也很不熟悉,所以参考了很多大佬的文章,难免会有疏漏,如果有缺失联系我补上。

https://www.cnblogs.com/zengguowang/p/8391227.html

https://zhuanlan.zhihu.com/p/332864496

https://xuanxuanblingbling.github.io/ctf/tools/2019/08/14/php/

https://blog.csdn.net/qq_32631847/article/details/82054011

评论

  1. llt太强了(暴风哭泣
    3 年前
    2021-4-01 15:25:05

    llt太强了(暴风哭泣

    • 博主
      llt太强了(暴风哭泣
      3 年前
      2021-4-01 15:27:51

      examine yyds

      • llt
        oatmeal
        3 年前
        2021-4-01 15:30:18

        examine算什么,我llt一个打一群

        • 博主
          llt
          3 年前
          2021-4-01 15:45:14

          你不对劲=。=

  2. Jan
    3 年前
    2021-4-03 20:33:27

    O牛yyds

    • 博主
      Jan
      3 年前
      2021-4-03 20:40:59

      禁尬黑

  3. thaii
    2 年前
    2022-1-28 21:54:46

    llt真的太强了,我又配了一遍

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇