刚出来实习就接触到了xdebug这种调试模式,但是因为工作需要,很久没用了,现在写篇博客记录一下。
建议使用php版本7.1以上,常量修饰符的支持需要这个版本以上,否则报错
1.安装phpstudy+phpstorm+谷歌xdebug插件
2.phpstudy中选择PHP版本和安装xdebug拓展;点击php拓展之后会自动生成。
3.配置phpstorm;端口9100得对应上php.ini的端口。
4.使用phpstorm软件调试,配置新增。
有个问题是,当你想调试一个源码时,这个时候,nginx默认接收php-fpm的时间默认60秒,这时就很容易404超时了,为了方便调试可以在开发的时候设置nginx的接收时间为更长时间如:
说明:
php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定.
PHP 程序中加入 ini_set('max_execution_time', '0'),数值 0 表示没有执行时间的限制,你的程序需要跑多久便跑多久。
5.常用快捷键总结。
ctr+shift+F8 查看断点
ctr+F8 增加断点
F7 一步一步进去底层方法,看源码
alt+F9 进入当前断点
F8一步一步执行
shift+F8 退出函数,返回上次执行的下一行
上次留了疑问?怎么调试命令行中的脚本呢?之前我们的调试都是基于浏览器去请求的,现在使用命令行去debug一下?
根据自己phpstorm版本选择官方文档:Debugging a PHP CLI script - Help | PhpStorm
采坑之路:
- phpstorm中命令行php版本和项目使用的版本不一致!需要修改系统环境变量。
本人本地测试了一下php7.0.9版本,是为了测试一个该版本的不支持:常量前加public的调试过程
public const SDK_VERSION = 'alipay-sdk-PHP-4.11.14.ALL';
起初在cmd中打印php版本,发现和项目使用的php版本不一致。phpstudy中可以设置对应项目的php版本的,在此故意设置为php7.0.9版本。
上面那个原因是系统环境变量导致的:选择对应的php7.0.9nts版本就可以命令行输出php -v
在phpstorm中terminal终端输入以下命令既可调试啦:
//命令行前置条件;端口根据自己的来,比如我的是9100
set XDEBUG_CONFIG="remote_enable=1 remote_mode=req remote_port=9100 remote_host=127.0.0.1 remote_connect_back=0"
//命令行执行条件
php yii queue/query-promotion-relation
debug成功 php版本不支持 常量前public
调试过程:
- step over 步过:一行一行的往下走,不会进入到其他方法的内部
- step into:步入:如果兰前行有方法执行,可以进入方法的内部(不会进入官方定义的方法,仅能进入自定义的方法),比如我想进入get方法,可以在get方法加个断点。
- run to Cursor:运行到箭头处,也就是鼠标箭头处调试;可以结合step over一步一步调试
- force step into:强制步入:如果当前行有方法执行,可以进入方法的内部何以进入官方定义的方法,这在查考底层源码时非常有用)。
- step out 一步一步往回走。
调试过程中 修改变量值,监听变量等,随便你玩
debug也可以远程debug服务器的,只不过得服务器配置:phpstorm+xdebug3本地或远程调试 - 编程混子 - 博客园
拓展:结合postman等接口工具进行调试,很多时候为了接口可以线上同步,公司共享使用postman,apipost等,调试POST请求等,参考:Docker-compose + postman + phpstorm + xdebug 调试接口_胖子会上树的博客-CSDN博客