PHP 调试指南.pdf

PHP 程序员的调试技术

根据要调试的对象的不同,采取的方法也不一样:

  • 调试 web 应用:对于 web 应用,可以在浏览器中安装插件,或者在 IDE 中设置,下面的设置二选一即可。

    • Get/Post 请求或 Cookie 中添加 XDEBUG_SESSION_START=session_name,使 Xdebug 知道这个请求应该连接 IDE 进行调试。一般由 IDE 提供这个功能。
    • 安装浏览器插件。
  • 调试其他应用:调试命令行程序或者单元测试时,不需要在浏览器中查看效果,则省去了上面的步骤。

下载并开启 Xdebug

通过 Xdebug,可以在 IDE 的终端进行调试,可以单步调试、查看调用栈和变量值。此外,Xdebug 还可以分析性能(XHProf 也可以分析性能)。

Xdebug 支持的功能有:

下载安装

下载地址:https://xdebug.org/download.php

我用的 PHP 是 7.2,64位,非线程安全的版本,所以下载 PHP 7.2 VC15 (64 bit) 这个版本的 Xdebug。

下载完成后,将其放入 PHP 安装目录下的 ext 目录。然后修改 php.ini 文件(或者专门建立独立的 ini 配置文件给 Xdebug 用)添加如下内容:

[Xdebug]
zend_extension="c:/php/ext/php_xdebug-2.1.0-5.3-vc6.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9001

通过命令行执行 php -v,输出中包含 Xdebug 的版本信息,则表示安装成功:

C:\Users\Administrator>php -v
PHP 7.2.7 (cli) (built: Jun 19 2018 23:13:48) ( NTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Xdebug v2.7.0alpha1, Copyright (c) 2002-2018, by Derick Rethans

注意,[Xdebug] 在 Linux 需要区分大小写。

设置 Xdebug

Xdebug 是 C/S 结构,Client 是 PHP 中安装的 Xdebug,Server 是 IDE 中安装的插件。PHP 脚本运行时,Xdebug 可以向 IDE 报告运行状态,并将调试信息发送给 IDE。

Xdebug 有大量的配置参数可以设置,完整设置可以参考 这里,常用设置如下:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;远程调试相关设置
;用于验证服务器,只有 Xdebug 的服务器与客户端的 idekey 匹配时才会发送调试消息
xdebug.idekey="PhpStorm"
;开启远程调试
xdebug.remote_enable=on
;自动启动远程调试,对于不是 web 应用的 PHP 程序来说,必须开启
xdebug.remote_autostart=on
xdebug.remote_mode="req"
xdebug.remote_log="d://lnmp/log/phpxdebug.log"
xdebug.remote_handler="dbgp"
;远端 Xdebug 服务器的 IP 地址
xdebug.remote_host=localhost
;远端 Xdebug 服务器的端口,在 IDE 中设置
xdebug.remote_port=9001 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;trace 代码跟踪相关设置
;是否允许Xdebug跟踪函数调用,跟踪信息以文件形式存储,默认值为0。用于调试 auto_prepend_file 中的代码
xdebug.auto_trace = 1
;代码跟踪日志文件位置,默认值为/tmp。需要先新建这个目录,并设置读写权限
xdebug.trace_output_dir=d://lnmp/log/php
;函数调用跟踪信息输出文件命名规则,默认为 trace.%c
xdebug.trace_output_name=trace.%c.%p
;是否允许 Xdebug 跟踪函数参数,默认值为0
xdebug.collect_params = 4
xdebug.collect_includes = On
;是否允许 Xdebug 跟踪函数返回值,默认值为0
xdebug.collect_return = On
xdebug.show_mem_delta = On
;设置数组或者对象显示的最大层级,默认是3
xdebug.var_display_max_depth = 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;profile 性能探查相关设置
;打开性能分析器,默认值为0
xdebug.profiler_enable=1
;性能分析文件的存放位置,默认值为/tmp。需要先新建这个目录,并设置读写权限
xdebug.profiler_output_dir=d://lnmp/log/php
;性能分析文件的命名规则,默认值为cachegrind.out.%p
xdebug.profiler_output_name=profiler.%c.%p

配置 IDE(以 PhpStorm 为例)

PhpStorm 设置项参考手册

调试非 web 应用

PHP 中的 Xdebug 配置完成后,接下来需要在 IDE 中设置 Xdebug 服务器,通过监听端口来获取代码运行状态。

添加 PHP 解释器

设置的路径:打开 IDE 后,依次选择 File | Settings | Languages & Frameworks | PHP,选择 PHP 版本和脚本位置即可。

设置 Xdebug

设置的路径:打开 IDE 后,依次选择 File | Settings | Languages & Frameworks | PHP | Debug,可以看到 Debug 相关设置。最重要的是端口号,默认是 9000,但这会跟 PHP-FPM 冲突,所以这里改为 9001。同时,需要在 php.ini 配置文件中通过 xdebug.remote_port=9001 告诉 Xdebug 客户端,服务器监听的端口号是 9001。

当前设置页面的参考手册在 这里

调试 web 应用

Debugging PHP Web Applications with Run Debug Configurations

PhpStorm 中可以通过 Run | Edit Configuration 进入 Run/Debug Configuration 调试设置页面,在这里添加测试项目后,点击调试按钮后,IDE 会自动打开浏览器,输好网址并添加这个字符串 XDEBUG_SESSION_START=session_name

设置 Xdebug 代理

字段 描述
IDE key 指定代理服务器的名称以标识 IDE 中的连接。这应该是当前活动的 php.ini 配置文件中 xdebug.idekey 设置的值。
Host 指定 Xdebug 代理服务器所在的主机。
Port 指定在代理调试会话期间 PhpStorm 将侦听的端口。

配置 debug 参数

配置浏览器

Xdebug 和 IDE 配置完成后,就可以调试非 web 应用了。对于需要在浏览器中调试的 web 应用,还需要在浏览器中安装插件,Chrome 直接安装 Xdebug Helper 就行了,其他浏览器可以参考 这里

插件安装好后,打开 PhpStorm 并监听 debug 连接(Run | Start Linstening for PHP Debug Connections,也就是调试工具栏中的小电话)。然后点击刚安装好的插件,选择 debugging、profiling 或 tracing 会话,在浏览器端初始化一个连接。

PHP 调试 - Xdebug的更多相关文章

  1. ref:phpstorm配置远程调试(xdebug)(docker中)

    ref:https://www.cnblogs.com/yjken/p/6555438.html readme:本文设置远程调试ubuntu中的php代码. 在docker中也可以,经过测试phpin ...

  2. phpstorm中配置真正的远程调试(xdebug)

    这里说的是真正的远程调试,不是本地,本地不需要安装任何php程序!!! 这里略去xdebug的安装,安装很简单可以下载源码包,动态编译进去! 环境: Dev 服务器(IP:192.168.2.100) ...

  3. zend studio配置调试(Xdebug方式)

    1.下载xdebug http://xdebug.org/download.php 我下的是PHP 5.4 VC9 (32 bit) [当前系统php是php5.4.14(win32)版本] 2.配置 ...

  4. php程序调试: xdebug的配置

    怎样在phpeclipse中像调试Java程序一样调试php呢? XDebug的版本号非常多,打开http://xdebug.org/index.php.把站点细致看一下,你会发现有句"If ...

  5. 不用print调试 xdebug ubuntu phpstorm 远程断点调试

    即使这会写php也遵守zebra大人的指示:不用print调试!!!!----环境ok  ---gan !!! w http://blog.csdn.net/ty_hf/article/details ...

  6. phpstorm+xdebug, 实现断点调试: xdebug如何配置

    [XDebug] xdebug.profiler_output_dir="D:\phpStudy\tmp\xdebug" xdebug.trace_output_dir=" ...

  7. Xdebug文档(七) 远程调试

    Xdebug提示调试客户端接口与PHP运行相联系.该章节解释如何设置PHP与xdebug,并推荐一些客户端. 介绍 Xdebug的远程调试器允许你检查数据结构,交互式地穿过和调试你的代码.该协议已经开 ...

  8. 用netbeans和xdebug调试php的配置

    xdebug的chrome.firefox插件 chrome:Xdebug helper firefox:easy Xdebug ----------------------------------- ...

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

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

随机推荐

  1. Java学习day4 程序流程控制一

    一.分支结构 条件语句:if...else if语句: 一个 if 语句包含一个布尔表达式和一条或多条语句,如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代 ...

  2. 第二次java面试(用友山东济南分公司)

    坐标:山东潍坊公共实训基地 面试单位:用友济南分公司(来了一位HR和技术经理) 本人状态:距离离校15天 宣讲: 1.女HR和男技术经理来到我们专业提前准备好的教室,先宣传海报和发传单,然后看了4个3 ...

  3. UI标签库专题十:JEECG智能开发平台 Form(form标签)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/30099121  1. Form(f ...

  4. axios动态数据的获取

    跨域:前端处理.后端处理 前端方法:代理 后端加header    第一步:全局安装axios cnpm install axios --save-dev        第二步: methods:{ ...

  5. CentOS安装Python3.x

    安装python3.6可能使用的依赖# yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqli ...

  6. css炫酷动画收藏

    1.按钮.hover.input动画(cssfx) https://cssfx.dev/ 2.svg 矢量定制icon(ikonate) https://www.ikonate.com/#conten ...

  7. Taro -- 获取用户手机号

    1. 安装 Taro 脚手架工具 安装 Taro 开发工具 @tarojs/cli 使用 npm 或者 yarn 全局安装 $ npm install -g @tarojs/cli $ yarn gl ...

  8. mysql查询每个部门/班级前几名

    Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id . +----+-------+--------+--------------+ | I ...

  9. [CF] 8C Looking for Order

    状压模板题 CF难度2000? 我得好好了解一下CF的难度机制了 反正CF的难度比洛谷真实就好了 Code #include<algorithm> #include<iostream ...

  10. CentOS7 利用systemctl添加自定义系统服务

    一.命令systemctl介绍 CentOS 7.0中已经没有service命令,而是启用了systemctl服务器命令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 命 ...