PHPStorm开启断点调试

关于xdebug。作为一个phper,相信大家平时的调试用的都是var_dump,echo之类的,像我之前不知道var_dump可以打印出多个变量,在写代码的时候,经常为了打印多个变量,要写很多var_dump,后来无意间解除了xdebug,虽然现在还是经常用var_dump,但我感觉这类的辅助工具都是为了更好的,更高效率的完成工作,得变通,什么方便,什么自己用的舒服就用什么。平时的我感觉xdebug对于框架的学习,和自己平时不熟悉的代码的时候用的方便,var_dump,我一般用来进行简单的调试。

1.原理
没去看了

2.安装
首先得安装xdebug的php扩展。相比较windows和linux, 在他们各自下面安装扩展的方式不同,windows下需要考虑的难点就是thread safety 等因素对源码包的影响,我们该如何选择dll文件,linux下面就是源码编译安装啦。 这个xdebug的官网(百度他的网站,http://xdebug.org/wizard.php)对xdbug的windows安装简直是更加友好,因为对于别的扩展,我们可能需要自己去网上查询windows下下载对应php扩展需要关注的一些信息,但是xdebug他的官网上只需要我们把你的安装的php的pathinfo() 的内容粘贴过去,她能自动帮你选择扩展版本,我们只需要把php的扩展放到对应的路径下就好了,然后修改php.ini。(关于linux下呢,同之前的文章linux下安装别的扩展,软件是一样的。先下载源码包,pecl上下载,然后查看是否包括 configure 文件,没有的话phpize生成,然后 make && make install, 需要指定php版本的话通过 with-php-configu=路径/php-config)。安装完成之后查看pathinfo,搜索xdebug,或者php -m 查看xdebug是否安装成功。
这里注意下我们通过xampp这类软件安装的lamp其实不是lamp,这个l linux根本不存在,我们用的是w,windows。

(如果没有在官网上找到如何帮你选择dll文件,可以看这篇文章 帮xdebug选择合适的安装版本)

3.phpstorm的配置
之前的配置在网上找吧,因为懒得截图了
简书上的这篇文章对安装方法写的很详细

4.注意事项

  1. 首先是关于断点的位置。代码会在断点之前结束,所以如果想要获取断点处的内容,务必在该内容之后打上断点。记得老师在将课程的时候甚至在这个方法结束处的 } 打了断点。
  2. 之前遇到的一个问题就是多个断点,只是执行了其中的几个断点,并没有执行完所有的断点,以为是使用的方法不对。后来发现其实是两个断点之间的代码有bug,导致后面的端点没有执行,··所以其实还是自身的问题。
  3. 断点调试的时候,所以的端点前面会有 √ 的标志,断点执行的那行代码会有颜色加深的标志。断点执行完,所有的 √ 的标志会没有。只要断点执行完了,接口才会有输出,并不是执行到哪个断点,哪个端点前面会有 √的标志。
  4. 代码可以一行一行的执行,也可以从这个断点直接跳转到下个断点,这样的好处是,对于复杂的框架可以知道代码是怎么执行的,然后断点间的跳转也可以迅速定位解决问题。但好像不同php文件断点间跳转,只有一个页面那个地方会对变量有输出。
  5. 变量的输出在下面那个debug tab标签处,开启断点调试,会在页面的url路径后面有xdebug_session 标志,把这个标志粘贴到不同的url,就能对不同的api进行测试,其实感觉这个就像一个接口一样,只要传递这个参数,就能执行这个debug接口的服务功能。
  6. 断点调试的关闭,··关闭那个phpstrom上方的类似电话的监听按钮肯定能关闭的,现在想了下,关闭下方tab肯定也是可以的,记得我每次close tab 他都会提醒是否close connect,断点调试的开始按钮是phpstorm的那个小瓢虫的标志。

7.对于windows下xdebug的配置和linux下还不一样

1
2
3
4
5
6
7
xdebug.idekey = "vagrant"  // 这个要和phpstrom中添加的内容保持一致
xdebug.default_enable = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9001 // 和phpstrom中保持一致
xdebug.remote_enable = 1 // 调试vagrant中的项目属于远程调试
xdebug.remote_autostart = 1
xdebug.remote_handler="dbgp"

这个是php.ini 中需要添加的内容

我们在调试部署在windows下的php代码的时候,属于本地调试,但我们调试部署在vagrant中的内容的属于远程调试,所以当我在查询如何安装xdebug的时候一定要加上vagrant或者是linux,因为有些小细节还是不一样的。

notice:

1
zend_extension = /opt/php/lib/php/extensions/no-debug-zts-20151012/xdebug.so

注意是zend_extension,要是extension的话,可能找不到

详细的(配合vagrant)配置方案,防止以后找不到:

  1. 这个地方的server就是上一步新建的server,我们这个地方需要新建PHP HTTP Request 或者是PHP Web Page,我一般用的都是PHP web page,这两个有什么不同呢,感觉简单的说就是一个是页面,一个是api接口,web page 会在每个url地址后面加上参数,但是api接口不用,web page通过安装一个xdebug的插件,可以让自己不用每次请求都手动添加那个参数。

image.png

我们想调试,必须打开这个监听端口,也就是第二个按钮
打开后,我们就要开启调试了,点击第一个按钮
第三个按钮肯定就是停止这次调试的意思啦

image.png

第一个感觉就是重置的意思,比如重新打了断点,重新从头开始debug,相比较点击那个小瓢虫,感觉就是不会新开一个debug的框框,但是xdebug那个参数还是会变的
第二个就是类似脚本执行,一步一步往下走
第三个就是显示每一步代码的执行过程
第四个就是每次跳转到光标处,如果两个端点之间没有光标,会跳转到下一个端点处

image.png

凯哥说第一个还挺好用,但其实自己用的比较少,第二个可以展示当前执行到那个文件了,第三个控制是否展示空的数组内容,感觉还是显示吧,否则有些想用的变量都找不到

2.首先我们需要在setting 目录配置php的解释器,

image.png

image.png

虽然我们用的是vagrant,但最好不要选那个,因为默认是127.0.0.1:2222连接,但这个ssh是连不上我们的那个vagrant,但我又不知道如何修改这个默认连接,所以只能通过第二个。第二个的远程配置和我们通过修改本地代码实现线上同步是一个道理,都是通过sftp协议,然后注意要选择custom,因为这样我们就可以不通过用户名和密码,而是密钥的形式进行远程连接了(之所以这样,是因为很多服务器我不知道密码啊,只有密钥)

3.

image.png

接着是端口,和前面php.ini 中保持一致,注意php-fpm 是9001,别冲突了

4.

image.png
还记得之前php.ini中的设置吗,需要和这上面保持一致

5.

image.png
这个注意下我红圈标注的地方就好了

6.

image.png

notice:

我们每个项目中配置的xdebug,只能在该项目中使用,类似我之前在laravel 当中配置的sql语句调试工作,也只能在本项目中看见

windows 下调试遇到的错误

phpstorm报错:Remote file path ‘XXX’ is not mapped to any file path in project(本地调试不要勾选)

image.png

下面是简单脚本的调试

https://www.cnblogs.com/yjken/p/8435018.html

今天凯哥教了一种脚本断点调试的方法,直接右键,debug 就好了,非常方便,我以前是按照上面的为每个脚本配置一个,很不方便

凯哥平时跑的python 都是cli 模式

php 除了cli 平时用的比较多的还是php-fpm 模式(之所以xdebug 那么难调整,是因为在php-fpm 下面比较难调整),对于php cli 下面还是和python 一样简单

坚持原创技术分享,您的支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------