开发环境:

本地 Windows10 日常开发使用的环境 装有PHPStorm 

远程主机 Linux  服务器 装php-fpm/nginx等所有开发依赖环境

本地可以访问远程主机 但远程主机无法访问本地 

目的

远程调试(remote debug)在windows本地环境下 调试远程服务器(Linux)上的代码

问题

之前一直认为 php-xdebug 的扩展的remote_debug 只能够支持本地环境下调试

其实原因是没有准备好调试环境  (远程的服务器上无法访问到本地的调试端口 需要通过ssh隧道端口映射 建立连接)

其client 和 server 的对应关系如下图

本地的PHPSTORM 在开启断点服务后 会打开一个的调试服务 (默认端口为 9000)

用于与服务器进通过DBGP行通信

但本地环境是处于局域网内 服务器无法通过IP 直接访问IDE的调试端口

步骤

1. 远程主机上安装 php_xdebug 扩展

  1) 下载xdebug扩展包  https://xdebug.org/docs/install

  2)之前安装依赖

yum install php-devel autoconf automake

  3)解压

tar -xvzf xdebug-2.9.0.tgz

  4)执行编译安装

cd xdebug-2.9.0

phpize

./configure

make && make install

2. 修改配置文件php.ini 并重启php-fpm

[xdebug]

zend_extension=/webser/soft/php72/lib/php/extensions/xdebug.so

xdebug.remote_enable=1

xdebug.remote_port=9001

xdebug.remote_host=127.0.0.1

xdebug.remote_log=/var/log/php-xdebug.log

xdebug.idekey="PHPSTORM"

然后查看phpinfo信息 检查配置是否生效

3. 本地与远程主机建立ssh隧道>端口转移 使远程主机能够访问到IDE的9001端口

远程主机上键入telnet命令# telnet 127.0.0.1 9001 检查是否能够访问9001 端口

(这里因为端口冲突 默认9000 改为9001 php.ini 与 PHPSTORM配置 保持一致)

4. PHPSTORM debug配置

添加Server 并配置IDE KEY (需与php.ini 中保持一致)

最后点击绿色的甲虫和电话筒 打开调试 并打上断点

Run (运行) > Break at first line in PHP scripts 设置php断点在脚本第一行

5. 安装xdebug_helper 或者 在请求中携带 IDEKey 即可触发调试

扩展: 当我们在需要再命令行模式中启用xdebug 时 可以通过以下方式 配置session_key

## When running the script from the command line
## you need to set an environment variable, like:
Linux 环境中:
export XDEBUG_CONFIG="idekey=session_name"
php myscript.php Windows 环境中:
set XDEBUG_CONFIG="idekey=session_name"

面板使用:

左侧

绿色三角形 : Resume Program,表示將继续执行,直到下一个中断点停止。

红色方形 : Stop,表示中断当前程序调试。

上方

第一个图形示 : Step Over,跳过当前函数。

第二个图形示 : Step Into,进入当前函数內部的程序(相当于观察程序一步一步执行)。

第三个图形示 : Force Step Into,強制进入当前函数內部的程序。

第四个图形示 : Step Out,跳出当前函数內部的程式。

第五个图形示 : Run to Cursor,定位到当前光标。

参考:

  https://juejin.im/post/6844903728193994766

  https://learnku.com/articles/39479

Xdebug+Phpstorm远程调试的更多相关文章

  1. 使用phpstorm和xdebug实现远程调试

    使用phpstorm和xdebug实现远程调试 2012-05-23 10:06:35 vs的断点调试功能很强大有木有,能查看所有变量有木有.php调试很麻烦有木有,echo,var_dump写得你想 ...

  2. PHP - 如何使用XDEBUG来远程调试?

    开发的时候我都是使用XDebug在本地调试,但是最近加入一些项目中去,环境太复杂了,要在本地搭建一个开发环境真的太麻烦了,那么我们怎么使用xdebug来远程调试呢? 我这里使用虚拟机搭建了一个模拟环境 ...

  3. PHP使用Xdebug进行远程调试

    PHP使用Xdebug进行远程调试 翻译 by mylxsw posted on 2014/07/14 under 技术文章 > 编程语言 Xdebug提供了客户端与PHP脚本进行交互的接口,这 ...

  4. XDEBUG+PHPSTORM 开发 调试

    原文:XDEBUG+PHPSTORM 开发 调试 XDEBUG+PHPSTORM 开发 调试 在我们开发过程中.我们如果经常性的echo.dump效率很低.所以我们就可以使用xdebug进行断点调试. ...

  5. PHPStorm+Xdebug断点远程调试PHP xdebug安装

    一.xdebug安装 wget http://www.xdebug.org/files/xdebug-2.2.3.tgz #下载Xdebug tar xzf xdebug-2.2.3.tgz cd x ...

  6. PHP+Xdebug实现远程调试

    以前以为php调试时服务器端和IDE必须在同一台机子上,无意发现xdebug其实是支持远程调试的. 尝试之后发现可以配置成功,还是可以调试代码的感觉爽啊!   php所在Ubuntu服务器       ...

  7. 使用xdebug+eclipse远程调试centOS7上的PHP代码

    这两天一直在研究PHP代码的调试,原来开发一直用的var_dump,麻烦! 最近发现能使用xdebug+eclipse远程单步调试PHP,但是百度后实现此技术的文章都写得不够具体. 我照着这里零散的文 ...

  8. [视频教程] 配置vscode的PHP自动补全提示与使用Xdebug进行远程调试debug

    默认下载安装完的vscode并不能准确提示和检测PHP的语法错误,需要手动指定一下本机的PHP程序路径.按下面的操作配置完后就能在文件保存的时候检测语法有无错误.打开文件->首选项->se ...

  9. php+xdebug+dbgp远程调试(多人)

    目录 创建 DBGP 服务 配置 调试 创建 DBGP 服务 到 下载页面,下载 python 版本的 dbgp 到服务器上. 解压后执行 pydbgpproxy. 如果提示找不到 dbgp 模块,则 ...

  10. PhpStorm集成xdebug进行断点调试

    本文介绍如何使用PhpStorm集成xdebug在本地开发环境进行断点调试的技巧. 我配置的环境是:Windows10 + PhpStorm10.0.1 + PHP5.6. 1. 下载xdebug的扩 ...

随机推荐

  1. TypeScript – Using Disposable

    前言 TypeScript v5.2 多了一个新功能叫 Disposable. Dispose 的作用是让 "对象" 离开 "作用域" 后做出一些 " ...

  2. sql server high cpu 排查

    refer: https://techcommunity.microsoft.com/t5/azure-sql/monitor-cpu-usage-on-sql-server-and-azure-sq ...

  3. Canvas简历编辑器-Monorepo+Rspack工程实践

    Canvas简历编辑器-Monorepo+Rspack工程实践 在之前我们围绕Canvas聊了很多代码设计层面的东西,在这里我们聊一下工程实践.在之前的文中我也提到过,因为是本着学习的态度以及对技术的 ...

  4. 图形化客户端工具——Navicat

    1.下载 下载地址:https://wwb.lanzoub.com/i4TuZ0g3okod   破解:     解压后有两个文件          先点击第一个文件依次安装     安装完成后    ...

  5. USB协议详解第10讲(USB描述符-报告描述符)

    1.报告描述符的概念和作用 开门见山,报告描述符就是描述报告(HID接口上传输事务中的数据)的一组数据结构. 首先大家可能会问,报告又是什么?我们前面讲过,USB主机一般是以中断的方式向HID设备发送 ...

  6. ARMv8中non-shareable inner-shareable outer-shareable属性

    如果将block的内存属性配置成Non-cacheable,那么数据就不会被缓存到cache,那么所有observer看到的内存是一致的,也就说此时也相当于Outer Shareable. 其实官方文 ...

  7. 推荐一款轻量级 eBPF 前端工具 ply

    1 Overview ply 是 eBPF 的 front-end 前端工具之一,专为 embedded Linux systems 开发,采用 C 语言编写,只需 libc 和内核支持 BPF 就可 ...

  8. 活动预告 | 中国数据库联盟(ACDU)中国行定档深圳,一起揭秘数据库前沿技术

    在当今数字化时代,数据库是各行各业中最核心的信息管理系统之一.随着技术的飞速发展,数据库领域也不断涌现出新的前沿技术和创新应用.数据库运维和开发人员需要紧跟前沿技术,才能保持竞争力,并实现更高效.更智 ...

  9. 谈一谈你对vue指令的理解

    vue指令的本质是给 html 标签新增一些属性 : vue的指令可以分为 3 中类型 : 1. 用于渲染数据的指令,比如 v-for ,v-if ,v-show : 2. 用来交互的指令 ,v-on ...

  10. Tomcat通信概念篇

    在上一篇了解完网络通信的基本概念之后,本章节为了解Tomcat的基本逻辑方便以后对 UDP:(发短信,不管是否能接受成功都会发送) //发送端 //不需要连接服务器 public static voi ...