NetBeans+Xdebug调试php代码
本文目录 :
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代码的更多相关文章
- NetBeans+Xdebug调试原理
使用Xdebug的远程调试,Xdebug作为一个嵌入到PHP的程序,扮演着客户端的角色,而IDE则作为服务器.下面的动态图展示了连接建立的过程. 服务端的IP为10.0.1.2, 使用HTTP协议,端 ...
- windows7 + iis7 + fastcgi + php5 + netbeans + xdebug 调试 php
Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. windows7 + iis7 + fastcgi + php5 + netbe ...
- PHPStorm + Xdebug 调试PHP代码 有大用
星期四, 12/26/2013 - 19:54 - shipingzhong PHPStorm + Xdebug 调试PHP代码 http://e.v-get.com/2013-11-20 16:55 ...
- phpstrom+xdebug调试PHP代码
众所周知开发PHP的IDE种类繁多,然而开发PHP并不能像开发其他语言一样,调试PHP代码对诸多新手来说,搭建调试环境就比较麻烦!其实哈,我发现NuSphere-phped-16.0很强大,集成了很强 ...
- zend studio 添加xdebug调试php代码
1.Eclipse下对于大部分语言都提供了调试器接口,自然的对于PHP,Zend已经集成了XDebug调试器,找到Zend中的Preferences->PHP->Debug, 将调试器设置 ...
- NETBEANS + XDEBUG + IIS PHP 代码 调试 DEBUG
参考: http://domainwebcenter.com/?p=936 http://www.sitepoint.com/debugging-and-profiling-php-with-xdeb ...
- NetBeans + Xdebug 调试WordPress
用NetBeans进行WordPress的相关开发和定制很顺手,配合Xdebug后调试起来也很方便. 详细配置过程如下(本例中Xampp安装目录为D:\xampp): 1: 下载xdebug(版本需匹 ...
- 在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码
在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码 参考: http://www.cnblogs.com/qiantuwuliang/archive/2011/0 ...
- 用netbeans和xdebug调试php的配置
xdebug的chrome.firefox插件 chrome:Xdebug helper firefox:easy Xdebug ----------------------------------- ...
随机推荐
- 前端开发框架简介:angular和react
作者:vienwu react是facebook推出一个用来构建用户界面的js库.官方介绍的三大特性如下: just the ui 把react只当作一个ui组件就好,等同于传统mvc中的view. ...
- preg_*匹配的字符串长度限制问题以及nginx,php上传文件过大问题
问题背景 使用插件上传高清图片,用的插件base64转码的,上传失败,接口提示:413 (Request Entity Too Large) 问题分析与解决 首先想到的是nginx和php的服务器配 ...
- JavaScript高级内容:原型链、继承、执行上下文、作用域链、闭包
了解这些问题,我先一步步来看,先从基础说起,然后引出这些概念. 本文只用实例验证结果,并做简要说明,给大家增加些印象,因为单独一项拿出来都需要大篇幅讲解. 1.值类型 & 引用类型 funct ...
- 读《effective C++》2
条款03:尽可能使用const(Use const whenever possible) 1.const == 奇妙的事 const的一件奇妙的事是,他允许你定义一个约束,(告诉编译器,这是一个“不该 ...
- 解决Tomcat: Can't load IA 32-bit .dll on a AMD 64-bit platform 问题
错误如下: java.lang.UnsatisfiedLinkError: E:\Program Files\MyEclipse 10\apache-tomcat-7.0.23\bin\tcnativ ...
- canvas与svg区别
canvas与svg区别 和SVG比起来有两个弱点,一个是画布里的内容是独立的,不能当成html元素:二是CANVAS是属于位图格式,而SVG是矢量图,可以平滑放大. HTML5的canvas画出来的 ...
- pt-online-schema-change的原理解析与应用说明
PERCONA提供了若干管理维护MySQL的小工具,集成在 PERCONA Toolkit工具中,有慢查询分析.主从差异对比.主从差异修复及在线表结构修改等工具,个人觉得挺好用的.本文简单 ...
- 计算机程序的思维逻辑 (82) - 理解ThreadLocal
本节,我们来探讨一个特殊的概念,线程本地变量,在Java中的实现是类ThreadLocal,它是什么?有什么用?实现原理是什么?让我们接下来逐步探讨. 基本概念和用法 线程本地变量是说,每个线程都有同 ...
- C#总结(二)事件Event 介绍总结
最近在总结一些基础的东西,主要是学起来很难懂,但是在日常又有可能会经常用到的东西.前面介绍了 C# 的 AutoResetEvent的使用介绍, 这次介绍事件(event). 事件(event),对于 ...
- 树型权限管理插件:jQuery Tree Multiselect详细使用指南
1.认识jQuery Tree Multiselect 这个插件允许用户以树型的形式来呈现列表复选框的选择.多用于权限管理中用于分配不同的权限.使用文档,请参考: https://github ...