使用调试器,可以设置断点并查看 PHP 代码到所设断点之前的浏览器输出。然后可以继续代码的执行并查看到下一断点之前的浏览器输出,然后再到下一个,直到 PHP 脚本完成。

  现在把 “设置” 一节中在 php.ini 中注释掉的行取消注释,并重新启动 Apache。现在装入了调试器,Eclipse 能够和它挂上了。

  现在在 Eclipse 中设计调试环境。请创建新的 test4.php 文件,先保持为空。现在单击 Run > Debug。在左侧面板中选择 PHP DBG Script,并单击 New。现在转到 File 选项卡,输入当前项目 debugArticle 以及想要调试的文件 test4.php。现在转到 Environment 选项卡,然后再到 Interpreter 子选项卡。在 PHP 的安装目录中找到 php.exe 文件(我的是 c:/apps/php5.0.3/php.exe)。现在单击 Remote Debug 子选项卡,选择 Remote Debug,如果没有使用 Windows,请取消 “Open with DBGSession URL in internal browser box” 复选框。把 Remote Source 路径设置成与要测试的 PHP 脚本的绝对路径(不是 Web 路径)相同(我的设置是 c:/www/debugArticle/test4.php)。现在单击 Debug。

  现在应当装入 Debug 透视图,如图 8 所示。否则,请单击 Window > Open Perspective > Other,并选择 Debug。

图 8. Eclipse 中的 Debug 透视图

  现在可以设置断点了。

  对于本文中使用的插件和扩展的版本,断点功能是必需的,因为 PHP 在把输出发送到浏览器之前会缓冲它。除此之外,需要做的不仅仅是设置一个断点把当前显示数据刷新到 Web 浏览器,所以要像下面和图 8 所示那样定义 test4.php。

清单 4. 设置和创建断点

<?php function break-point(){ ob_flush(); flush(); sleep(.1); debugBreak(); } print("This will get shown first, "); print("as will this<br>"); breakpoint(); print("This won't get shown until after "); print("continuing the break-point<br>"); breakpoint(); print("END!"); ?

  breakpoint() 函数会把缓冲的输出和其他缓冲的数据刷新到 Web 浏览器。对 sleep(.1) 的调用是必需的,这样代码中止于 debugBreak() 之前,服务器才有足够的时间把数据刷新到 Web 浏览器,这个函数是前面下载的 PHP 调试器扩展的内部函数。这样,调用 breakpoint() 会把 HTML 块、print() 和 echo() 语句的数据刷新到浏览器,然后中止代码执行。

  在像清单 4 那样编写完代码之后,可以打开浏览器并指向 test4.php,或者可以查看 PHP 浏览器窗口(我的是 http://localhost/debugArticle/test4.php)。每次输入和保存文件时,在 PHP 浏览器窗口中就已经启动了调试序列。如果不使用 Windows,请通过浏览器查看 test4.php。在保存了文件之后,用 F8 或单击 Run > Resume 继续代码执行。持续这么做,直到最后一行输出是 END! 为止(参见图 9、10 和 11)。

图 9. 初始的到第一个断点的 PHP 浏览器输出

  请注意图 9 中的 Debug 窗口如何把执行显示为挂起的。

图 10. 第一个断点之后到第二个断点之前的 PHP 浏览器输出

  图 10 的 Debug 窗口仍然把执行显示为挂起,而第二组数据显示在 PHP 浏览器中。

图 11. 完整的 PHP 浏览器输出

  注意,图 11 的 Debug 窗口中的代码不再挂起,整个脚本已经执行,如图 11 中的 PHP 浏览器所示。

  既然已经看到了用 PHPEclipse 和调试器扩展进行开发的优势,那么很难想像没有它会怎么样。

  结束语

  现在已经向 PHP 的调试技术集中添加了错误报告的运用、print 语句、PHPEclipse 和调试器扩展,您可以通过减少每行代码的错误数量,成为更有效的 PHP 编码人员。请参阅 参考资料 获得一些 PHP 教程,可以在上面测试这些新技能。

转载于:https://www.cnblogs.com/xieyunc/archive/2009/04/25/2793760.html

PHP程序员的优化调试技术和技巧相关推荐

  1. 程序员该如何学习技术

    程序员该如何学习技术 前言   学习是第一生产力,我从来都是这么认为的,人只有只有不断地学习才能意识到自己的缺点和不足,身为程序员,我更认为人们应当抱着终身学习的想法实践下去,这是我所一直践行且相信的 ...

  2. 顶级程序员招聘必会技术

    ** 顶级程序员招聘必会技术 ** 一.岗位名称:C++研发工程师(高级) 岗位职责: 1.负责公司主要产品代码维护.升级.核心代码迭代研发 2.保证产品按时按量上线 技术要求: 1.对软件设计技术有 ...

  3. java高深技术总结_一名25K以上的高薪Java程序员总结出的技术以及学习技能

    原标题:一名25K以上的高薪Java程序员总结出的技术以及学习技能 总所周知,Java是目前使用最为广泛的网络编程语言之一. 它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点. 一般 ...

  4. 阿里资深技术专家:在各阶段中,3年经验的程序员应具备哪些技术能力(进阶必看)...

    3年工作经验的Java程序员应该具备哪些技术能力,这可能是Java程序员们比较关心的内容.我这里要说明一下,以下列举的内容不是都要会的东西,但是你掌握得越多,最终能得到的评价.拿到的薪水势必也越高. ...

  5. 月薪2万java啥水平_月薪2w的Java程序员需要什么样的技术水平呢?

    原标题:月薪2w的Java程序员需要什么样的技术水平呢? 在互联网兴起的时代,大家基本都知道程序员的工资高,但并不代表每一个程序员的工资都很高.因为工资的高低也与程序员个人的技术水平有关.今天巨牛汇外 ...

  6. 程序员这样优化简历,已投制胜

    特别说明: 本文写于2015年11月,当时我在找工作,据此优化简历,每投必中.当时我还写了求职相关的其它文章,发布在微信订阅号"程序视界",比如大龄程序员的未来在何方.35岁程序员 ...

  7. 程序员以为警察不懂技术删代码,民警亮出学历,程序员懵了;4月数据库流行度排行榜;曝雷军接待王传福;VS Code 1.55...

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Leave all your unhappiness to yes ...

  8. python技术栈全景图_程序员之数据分析Python技术栈

    程序员之数据分析Python技术栈 Python是一种非常流行的脚本语言,其还提供了一个科学技术栈,可以进行快捷方便的数据分析,本系列文章将聚焦在如何使用基于Python的技术栈来构建数据分析的工具集 ...

  9. Java程序员需要了解哪些技术?

    Java程序员需要了解哪些技术?Java程序员常用的技术有哪些?在学习Java的时候,可能需要学习的知识点有很多,但在工作当中,实际经常用到的可能只有20%.下面就帮大家罗列一下Java程序员需要了解 ...

最新文章

  1. 一个系统的html源代码,h5后台模板源码bootstrap网站后台管理系统HTML页面后台源代码...
  2. 【Redis学习笔记】2018-05-30 Redis源码学习之Ziplist、Server
  3. linux下Mysql命令
  4. EF 执行存储过程方法
  5. Photoshop阴影与内阴影
  6. 使用 qemu 搭建内核开发环境
  7. 网站pc端分享QQ好友,空间,微博
  8. node php环境变量配置,关于NodeJS、NPM安装配置步骤(windows版本) 以及环境变量的介绍...
  9. MTK 驱动(79)---如何调整CPU corenum, freq, policy
  10. leetcode刷题:无重复字符的最长子串
  11. javascript日期格式化 转换
  12. 如何退出scala命令界面和scala常用命令
  13. java简易计算器代码
  14. 自检zabbix健康脚本
  15. PT100热电阻温度传感器 铂热电阻 德国贺利氏 硅胶四氟镀锡屏蔽线
  16. Cache entry deserialization failed, entry ignored 错误解决
  17. 高校计算机基础教学改革探讨
  18. matlab帧间差分法前景提取_matlab采用帧差法实现运动目标检测
  19. 项目上线那些事之Can't connect to X11 window server异常
  20. 使用pkg将node项目打包成exe后,EXE文件打开闪退

热门文章

  1. php 分页类使用,php 分页类
  2. Python中numpy数组的拼接、合并
  3. 双向口和准双向口操作的不同!
  4. 如何在WORD中设置标题1与标题2编号样式不一样
  5. 虚拟机下Linux安装图解之三:Linux发行版本之Red Hat 9 安装
  6. Tips_发送请求时添加一个随机数参数,让浏览器每次都重新发请求到服务器
  7. 《HTML5移动应用开发入门经典》—— 2.4 HTML5中的HTML语法变化
  8. 使用SQL如何把用逗号等字符隔开的字符串转换成列表,以及把列合并成符合隔开的字符串(转)...
  9. CSS a:hover伪类在IE6下的问题
  10. iPhone 中使用NSLocalizedString实现国际化