PHP调试-环境选择-window 原理principle调试流程解析 DBGp是什么 cmd乱码

10 篇文章 0 订阅

PHP调试-环境选择-window

应该要了解一下原理,而不是配。

还有这文章写于2021.1.1。如果过时了就不要照着复制粘贴了。
这里只是记录一下原理。不是教程。 只是整理教程记录链接!

官网的写的非常好了

https://www.jetbrains.com/zh-cn/phpstorm/documentation/debugging/

image-20210101114112374

这篇文章流程解析写的好:

https://learnku.com/articles/4090/the-first-step-to-becoming-a-senior-php-programmer-debugging-xdebug-principle

调试真是绝望

环境:window + phpstorm+php7

xdebug 和zend 两种工具只能二选一,会有冲突。

我选xdebug

调试均分为远程和本地两种

先引用一张动态原理图:

dd

模式二

本地

脚本类调试

参考:https://www.jetbrains.com/help/phpstorm/debugging-a-php-cli-script.html

我使用的是xdebug 调试

  • ctrl alt s 配置一下解释器

    image-20210101103600476

  • 配置一下php.ini 。参考xdebug 安装,安装完成后会显示调试器就算成功,重启 php .exe 运行成功不报错, 配置就没问题。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rI8ZNiem-1609480449412)(C:\Users\26284\AppData\Roaming\Typora\typora-user-images\image-20210101103709413.png)]image-20210101103900884

    xdebug 在php.ini 大概是这样子 重要的是端口号和zend_extension 和idekey

    idekey 是多人调试用到的

    端口号应该是xdebug收到连接就会发往9001端口(这个是phpstorm在监听)phpstorm默认监听了9003和9001端口。

    image-20210101104047868

    • 之后打断点,点击运行调试

    image-20210101110815152

    ​ 再选择php脚本

    ​ 或者:选择运行配置的话:php脚本

    image-20210101105330562

    到此结束,以下不用配了,不行再,参考


    顺便提一下

    image-20210101104243163

    cmd 乱码的话,问题不好找

    cmd命令行窗口显示中文乱码,多是因为cmd命令行窗口字符编码不匹配导致。

    修改cmd窗口字符编码为UTF-8,命令行中执行:chcp 65001
    切换回中文:chcp 936
    这两条命令只在当前窗口生效,重启后恢复之前的编码。

    切换cmd窗口字符编码有风险,例如切换过以后中文显示乱码,并且不能永久切换回原来模式,只能每次chcp 936。

    phpstorm 的话好像

    IntelliJ IDEA creates files using the IDE encoding defined in the File Encodings page of the Settings / Preferences dialog Ctrl+Alt+S. You can use either the system default or select from the list of available encodings. By default, this encoding affects console output. If you want the encoding for console output to be different from the global IDE settings, configure the corresponding JVM

php-web类的本地调试。以thinkPHP5为例

使用xdebug.

前提条件:php,xdebug 。 设置里选好配置解释器

https://www.jetbrains.com/help/phpstorm/zero-configuration-debugging.html#start-debugging-session

调试器:这个好像不用配

image-20210101104646947

这里 9001与php.ini 中对应。 注意9001端口是phpstorm启动的,是被连接者。什么时候启动?当你点击小电话时,就会启动。 xdebug默认是9000

我们来证明一下:

未点击之前 image-20210101131920005

和点击之后

image-20210101131856633

image-20210101104814475

DBGp代理的是9001。

DBGp是什么。要配吗?

https://xdebug.org/docs/dbgpProxy

This tool allows you to proxy and route debugging request to IDEs depending on which IDE key is in use.

将php收到的路由和代理 到各种ides 哪个ide呢? 取决于php.ini中的ide key 值与哪个ide中配置的idekey值 相等。这是在多人调试时?(有这样的应用场景?)教程介绍看jetbrains

Ps Xdebug Schema Proxy

xdbug 有两种模式,单一ip (默认)和多ip。如果你单一ip ,不配置是可以的

image-20210101105009708

运行配置的话:php web application

小电话,脚本的话, 要开启

小电话开启的是e Languages & Frameworks | PHP | Debug

也就是上面phpstorm中的xdebug 配置端口

image-20210101105235659

浏览器安装xdebug扩展,选择debug

配置一个 incoming Connection From dialog,

配置一个web server

有几种情况:

  • 就地服务器,项目在服务器的document root 例如 /htdocs 。 你开发相当于直接在服务器上(The document root of an in-place server is the parent of the project root, either immediate or not. )

  • 本地服务器。与上面不同的是这个要 复制资源到本地服务器目录。通常挂载方式。

  • 远程服务器。真正的远程。ip访问。use FTP/SFTP/FTPS protocols.

这里介绍就地,或者本地。

php-cgi是什么? web server(如nginx)与php.exe是不能直接交互的,所以通过第三者交互。

更准确的来说,是一个遵循web server 协议(FastCGI或者CGI)的解析器,因为像nginx不能解决php为后缀的文件,只能交给第三方处理,以实现所谓扩展性。协议遵循 接受.php 输出 html 。参考:https://segmentfault.com/q/1010000008356979

php-cgi 和php-fpm 有什么不同,同是cgi 。协议不同和功能上有些差异。一个是CGI协议,一个是FastCGI。功能上各有优点,不能说谁好。

image-20210101124757786

嗯,没错,你还得配置nginx中的conf 指定php的cgi在哪里。

反正,我是自己手动启动ph.cgi的。phpstorm选择php web 运行配置时会帮你启动php-FCG。为什么phpstorm 不全套做完呢。麻烦死了。

总而言之,实现这个流程就行了

浏览器(带一些识别区分信息,如xdbug扩展,intell的扩展,cookie,url session参数)->nginx->php-CGI->xdebug、php、DBGp->ide

返回时则逆过来就行了。

参考:原文作者:Newiep
转自链接:https://learnku.com/articles/4090/the-first-step-to-becoming-a-senior-php-programmer-debugging-xdebug-principle

远程

差不多原理。改一下ip 。部署之类的。

总之。php脚本类型好像是装好xdebug就是最简单的了。

Windows 下使用 Notepad++ 和 xdebug 调试 php 脚本 转自:http://www.mikespook.com/index.php/archives/98 介绍Notepad++ 是开放源代码的可替代记事本的编辑器。它运行于 MS Windows 环境,支持多种编程语言。可以浏览http://notepad-plus.sourceforge.net/ 了解更多相关信息。 Xdebugphp 的一个扩展,它提供了对 php 脚本进行除错、追踪、检查的各种功能。可以浏览 http://xdebug.org 了解更多相关信息。 下载Notepad++ 下载地址:http://www.baidu.com/link?url=uULkAaYHzZDZSGm8XOlPH8EPhKZCv8mcbQtmU82LssIoYsVDW2MdIi6g1hdcDKjpGacAHz0xtnxWZHuD1HWUEoL9qCFlDPS1jxAqOJ1ZrYe&wd;=&eqid=8c17eb080003c9bf000000035a1919ed Notepad++ 插件 DBGP plugin: http://download.csdn.net/download/hongjia88/10132543 xdebug:https://xdebug.org/download.php * xdebug 的版本需要匹配环境使用的 PHP 版本。 xdebug helper for firefox:https://addons.mozilla.org/zh-CN/firefox/addon/3960 安装Notepad++ 的安装方式如同大多数 Windows 下软件一样是非常简单的。只需按照屏幕提示设置并点击“下一步”,最后“完成”即可安装成功。 为了让 Notepad++ 和 xdebug 协同工作,需要安装 DBGP plugin。下载后只需解压缩至 Notepad++ 安装目录中的 plugins 目录即可,如:C:\Program Files\Notepad++\plugins。 xdebug 的安装请参考:http://www.mikespook.com/index.php/archives/34。需要说明的是,如果同时安装有 xcache 一定要先加载 xcache,再加载 xdebug。否则会造成 php 运行异常。 使用首先,将编写分别使用递归方式和使用循环方式计算100的阶乘的两个函数,如下: <?php function f1($x) // 循环计算 $x 的阶乘 { for($i = $x - 1; $i > 1; $i–) { $x *= $i; } return $x; } function f2($x) // 递归计算 $x 的阶乘 { if($x == 1) { return $x; } else { $y = $x - 1; return $x * f2($y); } } echo ‘f1: ‘ . f1(10); echo ‘’; echo ‘f2: ‘ . f2(10); 将该文件放入可通过 web 访问并由 php 正确解析的目录,访问结果如图: 使用 Notepad++ 打开这个文件。通常在文件上点击鼠标右键(或者左键,如果你跟我一个方向的话),选择“Edit with Notepad++”,如图: 如果你没有这项,或者无法使用 Notepad++,请检查是否正确的安装了 Notepad++。打开后的界面如图: 在 Notepad++ 的菜单“插件”中选择DBGp”并点击“Debug”: 会在编辑器下半部分打开调试窗口: 此时就已经打开了编辑器端的调试功能。 现在需要配置notepad++,打开DBGp->Debugger->config,填写Remote Server ip为127.0.0.1,IDE Hey留空,Remote Path和Local Path都为存放你的php文件的路径,点击确定,OK。 注意C:\windows\php.ini中“xdebug.remote_port=9000”。 使用XDEBUG_SESSION_START=1参数访问刚才编写的文件,如:http://127.0.0.1/foobar.php?XDEBUG_SESSION_START=1 此时会发现 Notepad++ 窗口会闪烁一下,这说明 Notepad++ 的 DBGp 插件已经生效。将光标放置到需要设置断点的位置,并点击有红点的按钮,光标所在行前会显示一个红点,表示断点行,如图: 此时访问/foobar.php?XDEBUG_SESSION_STAR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值