phpstorm怎么调试php代码(详细步骤)

虽然我是一个10多年的老码农,但是对于PHP来说,我依然是一个小学生,折腾了半天了,终于搞定了如何在phpstorm中进行断点调试,不用再各种echo了,过程还是蛮折腾的,于是记录一下。

先晒一个最终效果吧。


完成效果图

有一些太基础的我可能就不说了,如果还有疑问的,可以关注我个人的公众号给我留言。


老胡个人的公众号

1、理论知识

我不太想按照网上的教程,一步步告诉你怎么搞,因为每个人的情况真的千差万别,真的没法一步步就到位,很多人照着教程依然做不下去,就是因为“知其然不知所以然

不过本章纯属个人理解,未必正确,不喜欢看的可以直接跳第二章。

转载请注明,原文地址:https://www.jianshu.com/p/bf05fb1b1a98

首先是要用到的工具:——先不着急下载,下面会说下载
1、phpstorm
2、php运行环境,我这里直接用的宝塔装的nginx+php,也可以用其他的xampp,lamp等等
3、php代码调试工具:今天用的是xdebug,类似产品还有zend debugger

大概解释一下这三个玩意儿的角色:

  • 前两个比较好理解,phpstorm是代码编辑器,跟java的eclipse、python的pycharm类似,他们就是一个很牛逼的记事本而已,通常并不能直接运行代码,而是需要搭配运行环境才可以运行代码。
    例如:java的eclipse需要jdk,python的pycharm需要python sdk,phpstorm需要的就是“nginx/apache+php”
  • 比较恶心的就是代码调试工具了,在其他语言中,通常都不需要这个玩意儿就能调试,但是php需要,而且不论是xdebug还是zend debugger,都是需要下载2个东西,一个跟浏览器搭配,一个跟php搭配

我个人的理解是这样的:
1、不用调试工具的时候,如下图,我们用phpstorm编写好代码(期间各种echo调试),发布到服务器,然后浏览器请求服务器,服务器直接就返回了,很easy,但是运行过程中实际上已经跟phpstorm无关了,所以自然也就无法断点。

image.png

2、有了调试工具之后的情况如下图所示,橙色是我们新增或者修改了的东西。
1)安装了一个xdebug的浏览器插件
2)运行环境中安装了一个xdebug的插件
3)phpstorm中配置了一些东西,来跟xdebug进行搭配
整个流程串起来就是:
1)浏览器发出请求,被xdebug浏览器插件拦截,修改报文请求后继续请求服务器
2)服务器收到请求,发现xdebug插件,于是转给xdebug处理
3)xdebug收到请求,跟phpstorm沟通一下,将代码运行停在断点处,phpstorm收到之后在ide中做断点处理
4)程序员在ide中调试断点,phpstorm实时将调试情况同步给xdebug,xdebug根据程序员的要求逐步执行代码——所以xdebug和phpstorm之间,是会有很多次的交互,来保持调试的同步


image.png

整个流程说下来,可以看到,后端的xdebug和phpstorm的互通是实现断点调试的关键,前端的xdebug实际上并没有什么卵用,我们来看xdebug浏览器插件的界面,如下图,他实际上是一个配置界面,可以指定是否调试,以哪种方式调试。从设计的角度来说,这个完全可以通过phpstorm去配置。


image.png

2、实战

理论说完了,我们要做工作也就出来了

1)工具安装:

1)浏览器肯定得有了,我这里使用chrome
这里下载:https://www.google.com/chrome/
2)xdebug的浏览器插件,这里使用配合chrome的插件——xdebug也提供了其他浏览器的对应插件
这里下载:https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc
3)xdebug后台插件(下载解压即可,不需要安装)
这里下载:https://xdebug.org/download.php
4)phpstorm安装
这里下载:https://www.jetbrains.com/phpstorm/
5)nginx+php,我这里是用的宝塔(因为懒)
这里下载:https://www.bt.cn/

2)配置(真正恶心的是配置)

1)浏览器端的配置:浏览器和xdebug浏览器插件安装后,选择绿色的小虫子即可开启调试


image.png

2)php运行环境的配置:也就是nginx+php+xdebug
宝塔装好之后,一键安装nginx和php,然后找到php的设置,如下图所示,一键安装并配置xdebug


image.png

实际的操作是,他会自动下载安装xdebug,跟自行下载解压的没区别,然后在php.ini里面配置,最后一行的dll,就是我们前面解压的xdebug的dll路径:

[XDebug]
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir ="D:\BtSoft\WebSoft\temp\xdebug"
xdebug.trace_output_dir ="D:\BtSoft\WebSoft\temp\xdebug"
xdebug.profiler_output_name = "cache.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
zend_extension=php_xdebug.dll

然后在宝塔中新建一个网站,目录指向你的项目根目录。如果是其他容器,修改nginx或apache配置即可。


image.png

配置完成后check一下你的php环境是可以跑的。
3)然后是配置phpstorm与php环境、xdebug互通,第一章我们说了,这块儿是实现代码调试的关键

  • 首先要让phpstorm关联php的sdk
    如下图所示,打开phpstorm的设置,语言与框架,然后php,右边选择php的版本,我这里用的是7.1
    image.png

在弹出的对话框中,按照php的安装路径选择php.exe,选择后,会自动显示php的版本和对应的debugger,可以看到我这里的php版本是7.1.15,对应的debugger是xdebug2.5.5,这里之所以我选择了php,就可以自动识别出xdebug,就是因为在上一步的配置中,我们已经在php.ini中配置了xdebug的dll路径,如果这里你的无法识别,就去上一步找找原因,知道可以识别为止。


image.png
  • 配置调试
    配置完php之后,继续打开debug这个选项,右侧可以看到四个步骤,我翻译一下:
    1.安装xdebug或者zend debugger,验证debugger配置
    2.安装浏览器工具
    3.打开php调试连接(还记得理论部分我们说过,xdebug需要多次跟phpstorm交互吗,就是通过这个listener)
    4.开始debug
    image.png

第一步的安装我们已经完成了,现在点validate来验证一下,如下图所示,第一行选择local的server,第二行填写php项目路径,第三行填写访问地址(如果有端口记得加上),然后点击validate,正常会入下面红框所示,一堆绿色的对勾,把server信息、php.ini信息、xdebug信息等显示出来。


image.png

如果你的显示是各种异常,就针对性的去解决,比如下面这个404,就说明url是无法访问的,可以复制到浏览器里面看一下,是不是地址填的不对,缺了端口,或者服务器没启动;
还有可能是提示php可以了,但是xdebug不行,那还是回到刚才说的xdebug的配置。

image.png

第二步是说安装浏览器插件,我们上面已经装好了
第三步打开connection,点击一下打开就行了。
第四步开始debug,那么我们就开始吧。
我们新建一个test.php文件,随便写点内容

<?php

echo "test";
echo phpinfo();

但是发现右上角的运行是灰色的,这是因为我们要新建一个server


image.png

还是在配置中,如下图所示新建一个server


image.png

然后新建一个运行配置,选择php web page,右侧的配置中,server选择刚才新建的server,启用页面选择/test.php,浏览器选择chrome


image.png

image.png

然后就可以启动了,加一个断点,点击debug按钮进行调试


image.png

这时就会自动打开页面,并定位到断点处。


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容