使用Xdebug进行远程调试

2024-04-09 11:38

本文主要是介绍使用Xdebug进行远程调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为什么要用?

  1. 方便联调:
    和客户端一起联调,是die(); exit(); 会影响其他人员是使用。
  2. 关注数据变化:
    正常情况下,我们在调试和开发时,更关注数据的变化。频繁断点、效率比较低。
  3. 简单:
    之前的开发自己比较懒,一直没用,用起来发现很简单。

原理

运行xdebug需要客户端IDE(phpstorm)、远程服务器配合,首先是客户端配置好端口,发送debug请求,请求会通过浏览器或者IDE的http请求,携带特定的参数发送到服务端,服务端收到请求后,发现这是一个xdebug请求,则与IDE建立dpgp连接,当遇到断点时候,返回调试信息给IDE

在这里插入图片描述

  • 服务器的IP是10.0.1.2,端口80上有HTTP
  • IDE位于未知IP上,因此xdebug.remote_connect_back设置为1
  • IDE侦听端口9000,因此xdebug.remote_port设置为9000
  • 发出HTTP请求,Xdebug从HTTP头中检测IP地址
  • Xdebug连接到端口9000上检测到的IP(10.0.1.42)
  • 调试运行,提供HTTP响应

流程

在这里插入图片描述

1. 安装xdebug扩展

https://xdebug.org/download.php

2. 远程环境配置

zend_extension=xdebug.so
xdebug.idekey=PHPSTORM
xdebug.remote_connect_back = 1
//如果开启此,将忽略下面的 xdebug.remote_host 的参数xdebug.remote_host=192.168.x.x
//注意这里是,客户端的ip<即IDE的机器的ip,不是你的web server>xdebug.remote_enable=on
xdebug.remote_port = 9001
//注意这里是,客户端的端口<即IDE的机器的ip,不是你的web server>xdebug.remote_handler = dbgp
xdebug.auto_trace = 1
xdebug.remote_log = /tmp/xdebug.log

3. 配置deployment

在这里插入图片描述

4. Phpstorm Debug配置

在这里插入图片描述

5. 开启phpstorm 数据监听

在这里插入图片描述

6. 设置 debug session

debug session 的工具的目的是设置一个cookie, 让每次发送数据的时候都会携带这个 cookie, 从而识别监听.

6.1) 安装工具
https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc

6.2) 点击图标设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZcbWs6w6-1579154178585)(https://cdn.nlark.com/yuque/0/2018/png/103176/1536631091957-8c6806b0-29ec-4aeb-8f50-687a51d3ad1b.png “”)]

6.3) 已经设置了cookie, Key 是 XDEBUG_SESSION, 值是 PHPSTORM,

在这里插入图片描述

7. 运行页面

在这里插入图片描述

其他调试方式

上面的模式有个缺点,插件是针对于一个标签页
快捷键:
Mac: Ctrl+Shift+X Windows:Alt+Shift+X

内部模式

1. 设置 web 访问的服务器

在这里插入图片描述

2. 配置调试页面

我们这里创建的调试页面的类型是 PHP Web Page, 服务器选择的是刚才已经建立好的服务器

在这里插入图片描述

3. 运行测试页面

在这里插入图片描述

自动生成:XDEBUG_SESSION_START
http://example.com/?XDEBUG_SESSION_START=13608

Fiddler工具调试

if (oSession.host == "xxxx")
{var sCookie = oSession.oRequest["Cookie"] + ';XDEBUG_SESSION=PHPSTORM;';oSession.oRequest.headers.Add("Cookie", sCookie);		
}

命令行

export XDEBUG_CONFIG="idekey=PHPSTORM"
php myscript.php

多人开发模式

https://derickrethans.nl/debugging-with-multiple-users.html
插件下载地址:http://code.activestate.com/komodo/remotedebugging/

其他

1. 查看兼容性

第一次运行的时候可以通过 phpstorm 自带的工具来检查配置的兼容性.
Run > Web Server Debug Validation
校验代码
:https://gist.github.com/han8gui/231ba75c8989ffe6dfab3831c0dcd58a

2. debug 帮助面板说明

在这里插入图片描述

左侧
绿色三角形 : Resume Program,表示將继续执行,直到下一个中断点停止。
红色方形 : Stop,表示中断当前程序调试。

上方
第一个图形示 : Step Over,跳过当前函数。
第二个图形示 : Step Into,进入当前函数內部的程序(相当于观察程序一步一步执行)。
第三个图形示 : Force Step Into,強制进入当前函数內部的程序。
第四个图形示 : Step Out,跳出当前函数內部的程式。
第五个图形示 : Run to Cursor,定位到当前光标。

参考文章

https://segmentfault.com/a/1190000011387666

这篇关于使用Xdebug进行远程调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888056

相关文章

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将