本文目录

  1. Xdebug的工作原理
  2. Xdebug扩展的配置
  3. NetBeans的配置
  4. 调试实例
  5. 本文小结
  6. 参考文档

Xdebug:是PHP的调试器和分析器(Debugger and Profiler Tool for PHP)。

本章着重讲PHP的调试。

日常开发PHP,有时遇到需要频繁打印变量的情况,一直用 var_dump 会很麻烦。

又或者用了一个新的框架,或阅读一些比较大的开源项目,梳理代码流程就很重要了。

如果用上 Xdebug 的话,就很方便,你可以在程序中打断点,单步运行,运行中修改变量值等。

方便于代码问题的定位,和代码流程的梳理。

开发时常用 NetBeans IDE,那如何在IDE中加上 Xdebug 这个调试利器呢?

1、 Xdebug的工作原理

上图来自官网,左边是任何支持 Xdebug 的IDE(本文中就是Netbeans啦),当然,这个IDE 你也可以自己实现,你只要遵循和用上官方提供的 Xdebug 接口,就可以轻松实现该功能。

右边是运行着PHP的服务器,配置双边的通信IP地址、端口号(如默认9000)和一些辅助参数,如指定使用调试协议为 DBGP ,默认也是这个协议,目前应该也只支持这个协议了。

在当前调试的URL后面加上了 XDEBUG_SESSION_START 的请求参数,参数值为客户端标识(相当于用户名,用以区别不同的客户端),如本文中的 netbeans-xdebug, 然后向PHP服务器发送请求,服务器的Xdebug监测到这个参数,自动进入调试模式,双边建立了连接。结束调试时也发一个URL,打上 XDEBUG_SESSION_STOP 参数。

请求例子如:(*http://tp5/* 是我本地服务器的测试地址)

http://tp5/?XDEBUG_SESSION_START=netbeans-xdebug

2、 Xdebug扩展的配置

我们按照工作原理中的配置内容,来配置一下PHP的扩展Xdebug。

打开 php.ini,加上扩展吧:(有些集成环境已经有 Xdebug 扩展,如 Wamp,不必再折腾,配一下参数即可)

[xdebug]
zend_extension ="你的php路径/zend_ext/php_xdebug-版本号.dll"
//注意要跟php版本号对应,如果是Apache的话,选择ts版本(线程安全)

后边配置如下内容:

xdebug.remote_enable = on       /*打开远程调试开关*/
xdebug.remote_handler = dbgp    /*调试协议,默认dbgp,可不配*/
xdebug.remote_host = localhost  /*调试服务器的IP地址*/
xdebug.remote_port = 9000       /*端口号,默认9000,可不配*/

phpinfo() 查看确保 Xdebug 运行了。

3、 NetBeans的配置

打开 NetBeans 中如下选项,按需配置吧,本地调试的话,一般默认就好,可以参考 官网 进行配置。

下面的 会话ID 正是 XDEBUG_SESSION_START 等的参数。

右键项目,选择属性,配置一下服务器的地址,选择远程站点的需要多配置一些目录路径等:

4、 调试实例

我这边拿个 Thinkphp 的裸工程来进行示范。

启动web服务器,确保xdebug运行了,用Netbeans打开工程,选择调试的浏览器,如果对网页进行细致的查看的话,推荐使用 嵌入式WebKit浏览器,不然IDE 每调试一次就会打开一个浏览器tab,比较多余的动作。

选择好浏览器后,单击上面的调试按钮,有如下图:

左边那个绿色的箭头表示程序运行到了这里(不包括该行),这一行其实是代码的第一行,因为上面设置中的 第一行停止 选项已经勾上了。

可以看到中间窗体正是内置浏览器,下面窗体是各种调试信息,可以看到 $_GET[XDEBUG_SESSION_START] 的值是设置中的值。

还有调用堆栈,这里就不截图了,比较直观,其实就是 debug_print_backtrace() 功能。

其他功能其实你看一下就懂的。

尝试在控制器中打一下断点,点击运行按钮,$name 的值就展现出来了,很直观方便:

修改一下 $name 的值,有:

最后点击运行按钮,网页就展示出来了,因为后面再也没有其他断点。点击 完成调试器会话 按钮,就会显示调试结束页面。

小结

Netbeans 配合 Xdebug 扩展用起来比较简单好用。

但是会有一定的性能问题,在生产环境下,在不需要调试的时候就要关闭 Xdebug 功能。

Xdebug还有profiler和trace等功能,也是分析程序性能的利器。

主要参考文档

1、在 NetBeans IDE 中调试 PHP 源代码

2、Xdebug 配置

3、How To Configure XDebug

4、Remote Debugging

5、DBGP - A common debugger protocol for languages and debugger UI communication

-end-

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
发表日期:2017年5月30日

NetBeans+Xdebug调试php代码的更多相关文章

  1. NetBeans+Xdebug调试原理

    使用Xdebug的远程调试,Xdebug作为一个嵌入到PHP的程序,扮演着客户端的角色,而IDE则作为服务器.下面的动态图展示了连接建立的过程. 服务端的IP为10.0.1.2, 使用HTTP协议,端 ...

  2. windows7 + iis7 + fastcgi + php5 + netbeans + xdebug 调试 php

    Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. windows7 + iis7 + fastcgi + php5 + netbe ...

  3. PHPStorm + Xdebug 调试PHP代码 有大用

    星期四, 12/26/2013 - 19:54 - shipingzhong PHPStorm + Xdebug 调试PHP代码 http://e.v-get.com/2013-11-20 16:55 ...

  4. phpstrom+xdebug调试PHP代码

    众所周知开发PHP的IDE种类繁多,然而开发PHP并不能像开发其他语言一样,调试PHP代码对诸多新手来说,搭建调试环境就比较麻烦!其实哈,我发现NuSphere-phped-16.0很强大,集成了很强 ...

  5. zend studio 添加xdebug调试php代码

    1.Eclipse下对于大部分语言都提供了调试器接口,自然的对于PHP,Zend已经集成了XDebug调试器,找到Zend中的Preferences->PHP->Debug, 将调试器设置 ...

  6. NETBEANS + XDEBUG + IIS PHP 代码 调试 DEBUG

    参考: http://domainwebcenter.com/?p=936 http://www.sitepoint.com/debugging-and-profiling-php-with-xdeb ...

  7. NetBeans + Xdebug 调试WordPress

    用NetBeans进行WordPress的相关开发和定制很顺手,配合Xdebug后调试起来也很方便. 详细配置过程如下(本例中Xampp安装目录为D:\xampp): 1: 下载xdebug(版本需匹 ...

  8. 在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码

    在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码 参考: http://www.cnblogs.com/qiantuwuliang/archive/2011/0 ...

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

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

随机推荐

  1. [转载]转载一篇好文章作为Java与面向对象之随感(3)

    关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没法很 ...

  2. iOS标注和适配

    很多项目一开始没有注意美术素材的规范,这在后期会引起混乱.假如有机会做一个新项目(旧项目会有自己的历史问题,一下子很难改过来),建议设计师和程序员一起坐下来.共同设立一套规范,之后共同遵守. 下面说说 ...

  3. 聊聊 Tomcat 的单机多实例

    Tomcat 从何而来? 先说 Tomcat 这一单词解释,如果你不是一个开发者,当然它在美国口语中并非是褒义词:如果你是开发者,那你一定听过 Web 应用服务器.Sun 公司和 Tomcat .如你 ...

  4. 利用jackson-databind,复杂对象对象和json数据互转

    如果简单对象,那么转换的方式比较多,这里指的复杂对象,是指对象里面存在cycle引用,比如: /** * @author ding * */@Entity@Table(name = "ser ...

  5. position relative

    position的默认值是static,(也就是说对于任意一个元素,如果没有定义它的position属性,那么它的position:static) 如果你想让这个#demo里的一个div#sub相对于 ...

  6. DirectFB学习笔记二

    本篇目的,画一个方框,在方框上画一串字符. 实现步骤:首先创建IDirectFB接口,通过它再创建要显示的表面surface,同时创建字体font,绘制字符必须要设置绘制的字体,否则绘制不成功.然后清 ...

  7. 【源码分析】cJSON库学习

    cJSON库是什么? cJSON是一个轻量级的json解析库.使用起来非常简单,整个库非常地简洁,核心功能的实现都在cJSON.c文件,非常适合阅读源代码来学习C语言.最近读完这个库的源码,分享自己收 ...

  8. FrameBuffer系列 之 介绍

    1.     来由 FrameBuffer是出现在2.2.xx内核当中的一种驱动程序接口.Linux工作在保护模式下,所以用户态进程是无法象 DOS 那样使用显卡 BIOS里提供的中断调用来实现直接写 ...

  9. Viewpager结合fragment实现底部导航

    具体实现如下: FindFragment.java package fbtt.com.fbtt.fragment; import android.os.Bundle; import android.s ...

  10. 前端魔法堂:onsubmit和submit事件处理函数怎么不生效呢?

    前言  最近在用Polymer增强form,使其支持表单的异步提交,但发现明明订阅了onsubmit和submit事件,却怎么也触发不了.下面我们将一一道来. 提交表单的方式 表单仅含一个以下的元素时 ...