相信很多朋友们都有调试程序的经历,然而很多时候调试程序是痛苦而又漫长的过程;它不仅需要细心,更需要耐心,切忌心浮气躁。但是当找出问题并顺利 解决它时,又会给人无比激动的喜悦。这里总结一下笔者在程序调试中的使用的原则,工具,以及方法。这里需要说明的是,某些原则性的东西,各种语言都是差不 多的,而涉及到具体的工具和某些具体的调试方法,这里只涉及web开发方面的内容。

总体原则:

1.找出问题原因:

程序需要调试,是因为程序有问题。而调试的第一目标是找到原因。常见调试方法, 排除法: 当我们面对整个复杂的系统时,常常完全不知道问题出在什么地方;这个时候可以先将与问题不相关的地方排排除,逐渐缩小调试范围。独立模块法: 大部分程序都有模块结构,将可疑模块单独拿出来,模拟输入相应的操作数据,看是否出现问题。比较法:如果程序或系统是基于某个平台时,可以先看看其他基于 本平台的程序或系统,找出是平台问题还是本程序问题,很多时候这种方法是用来排除不成熟平台上的隐藏问题。对比法:对于自己实现的程序,可能已经有相应的 开源的模块,可以把这些程序源码找出来,和自己的程序进行对比,这样不仅节省时间,还能借鉴别人的优秀之处。

2.问题定位:

问题原因的多种多样,可能这个时候你只能知道是什么样的问题, 可能与什么相关, 这个时候就需将出现的代码段找出来。而需要做到这一步,一般开发环境为我们提供很多实用工具,借助这些工具,可以一步一步地查看程序的输入和输出,根据每一步的输入输出,定位问题。

有一部分很厉害的人,可以通过阅读代码,找到出现问题的地方。但是很多问题都是调试者自己因为疏忽造成的,而要通过这样方式去查找问题,几乎是不可能的,因为已经形成固定的思维定势。

3.解决问题

找到问题的原因和相应代码行,解决它很多时候是一件比较简单的事,因为这些问题往往自己疏忽或者自己考虑不周。但是某些时候并不总是这样的,而是由 于外部环境造成的,比如你的网站访问的人数增多,你当初没有考虑到这些数据压力,同时也没有考虑到高度并发性的问题,这个时候问题解决起来是你觉得比较棘 手。而要解决这样的问题,不仅仅要专注程序, 更要从系统架构方面着手,综合各方面的知识,进行全面的考虑。

web开发常用调试工具

俗话说:工欲善其石,必先利其器。对于程序的调试,也必须借助外部工具。这里介绍几种在开发web程序中常常用到的工具:

xdebug, xhprof:php性能调试工具。他们都是php的一种扩展,可以很方便的安装和配置。这两个工具主要是将你程序的内部运行状况,调用函数以一种简洁的 方式告诉你。让你对程序在什么地方占用过多的资源,那些地方需要进行优化一目了然。 顺便提一下,xdebug生成的profile文件一般借助winCacheGrid查看。

firephp, firbug: 前者主要是php的调试工具,而后者是web开发必不可少的工具, 它不仅能查看请求,还能调试js,css。

在ie下面可以使用HttpWatch。如果需要将数据做深入分析,可以使用抓包工具。

php中常使用的调试函数:error_report, var_dump, print_r, var_export

mysql,apache/nginx的常用的调试技巧:分析他们日志文件也是相当重要。在linux下查看日志文件的常用命令: cat, more, less, grep, awk, sed

常见的调试技巧和方法

下面以我调试的程序来介绍一下具体的调试方法和技巧。

例子1: 这是一个php开发的游戏引擎,主要功能提供双发球员移动位置,状态,传球,技能等功能控制,整个程序通过xml文件保存结果。突然某天,有两个用户进行 比赛,返回的xml不符合正常的结构。从返回的结果来看,球员的移动位置有些不正常,其中少了某些步骤,于是决定从游戏的AI入手查找,但是也没有发现此 处有什么异常。最后将输入的球员数据打印出来,然后将中间产生的数据也打印出来,结合程序的处理逻辑,发现是这两个用户有同一个球员,因此导致在处理的时 候, 两个人的球员出现混乱。找到原因后,就将这个以球员标识改为以球队和球员共同决定即可。

例子2:程序刚上线, 有些热心的朋友们喜欢对程序进行一些压力测试。某次突然20w的请求很大的一个静态资源,直接导致硬盘瘫痪。对于这种情况,必须查看访问日志,才知道发生 什么事。否则人家对你攻击了, 你还找不到原因。当然对于这样的攻击,直接把静态资源放到cdn上。另外,随着访问用户量的增大,系统的压力增大, 反应逐渐变慢,我们不得不考虑:以前只需要0.000几毫秒能处理的程序,现在需要0.几秒。这个时候程序的并发性设计就很重要了。否则会造成数据异常的 情况。

例子3:使用外部软件出现异常:例如使用memcached的时候,如果某台没有启动或者不能使用了。这个时候nginx一般就会对某些使用memcache的请求返回502,是不是感觉有点无厘头,可以考虑改写memcahce 的php扩展了

7 php程序的调试方法_php程序调试方法总结相关推荐

  1. php程序员就业方向,php程序员发展方向_php程序员有前途吗

    刚刚开始学PHP的小伙伴们可能都会有这样的疑问,PHP好学吗?学PHP有前途吗?PHP有哪些发展方向呢?的确,搞清楚学习PHP有没有用,前景如何,发展方向是什么这些问题是非常重要的.本期乔布 PHP程 ...

  2. php程序员自我描述_PHP程序员面试自我介绍

    PHP程序员自我介绍的时候,一般都使用这几个要点来进行来说明的. 第一关于PHP程序员是否有良好的职业道德和工作态度,需要有工作认真.踏实,责任心以及很强的进取心. 第二关于PHP程序员是否有良好的客 ...

  3. php程序员自我描述_PHP程序员面试自我介绍简洁

    PHP程序员自我介绍的时候,很多人抓不到重点来讲,下面是应届毕业生网的小编总结的几点信息,希望对你有用! 第一关于PHP程序员是否有良好的职业道德和工作态度,需要有工作认真.踏实,责任心以及很强的进取 ...

  4. 向上取整的方法_PHP取整方法小总结

    php中文网最新课程 每日17点准时技术干货分享 本篇文章主要给大家介绍PHP取整的四种方法. PHP实现取整的问题,不仅在我们学习PHP过程中会遇到,在我们PHP面试过程中也是常见的考点之一. 下面 ...

  5. 7 php程序的调试方法_PHP程序错误调试方法 让php显示错误提示

    公司的服务器用的是wdcp搭建的环境,安装非常方便,但是在开发的过程可能把函数名之内的东西写错了,服务器直接返回的是500错误,没有任何错误提示,只是告诉你500错误,很让人头疼,这样调试错误很不方便 ...

  6. php的bom头会影响格式,phpBOM头(字符#65279;)出现的原因以及解决方法_PHP程序员博客|高蒙个人博客...

    // 设定你要清除BOM的根目录(会自动扫描所有子目录和文件) $HOME = dirname(__FILE__); // 如果是Windows系统,修改为:$WIN = 1; $WIN = 0; ? ...

  7. php程序员 合川_PHP程序员将何去何从?

    不要给程序员前面加上语言的修饰,你是程序员,是软件工程师,不要把自己当做 CRUD 流水线上的工人看待,公司需要什么,业务需要什么,你就用程序去实现,不会,就去学习,你应当掌握的是软件工程方法,而不只 ...

  8. php程序员述职材料_php程序员述职报告(精选多篇)

    第 1 页 本文共有 6329.5 字,如对您有帮助,可购买打赏 第一篇: php 程序员述职报告 大家好,我是来自技术部的 xxx ,我于 2019 年 3 月进入公司做 php 程序开发,至今已近 ...

  9. php程序员述职材料_php程序员述职报告(多篇范文)

    第 1 页 共 20 页 php 程序员述职报告 大家好,我是来自技术部的 xxx ,我于 XX 年 3 月进入公司做 php 程序开发,至今已近三个月了.初来公司,曾经很担心不知该怎么与 人共处,该 ...

最新文章

  1. dqn在训练过程中loss越来越大_用DQN算法玩FlappyBird
  2. vmci.sys版本不正确_这样安装 Python 库才是最正确的哦
  3. ASP.NET Core 集成 React SPA 应用
  4. structs2拦截器详解
  5. R语言使用strsplit函数遇到non-character argument怎么解决
  6. 思科网院Packet Tracer实验(七)IP编址
  7. Android 测试点归纳总结
  8. 地铁工程安全生产预警系统价格
  9. word文档通配符换行_Word中如何使用通配符进行查找和替换
  10. 2018年阅读随笔记录(持续更新)
  11. java计算税率例子
  12. 基于上下采样的adaboost模型对信用卡欺诈数据进行识别
  13. jquery banner广告图片左右切换,模仿实现支付宝广告效果
  14. 「五福一安」大小的 18W 充电器 — Anker Nano 18W 评测
  15. 揭密 HAP 激光雷达的实际性能表现
  16. 游戏辅助制作核心--植物大战僵尸逆向之召唤僵尸call(九)
  17. import win32api, sys, os ImportError: DLL load failed: The specified module could not be found.
  18. android降噪算法,Android主动降噪功能
  19. 多智能体强化学习(MARL)训练环境总结
  20. matlab 2012数学计算与工程分析从入门到精通,MATLAB 2012数学计算与工程分析从入门到精通...

热门文章

  1. 重温强化学习之函数近似
  2. sklearn 笔记:make_blobs 生成聚类数据
  3. 预训练模型需要知道的知识点总结,万字长文带你深入学习(建议收藏)
  4. R语言实战应用精讲50篇(八)-随机区组设计资料的方差分析
  5. 来个邪恶假说,假如有人把支付宝所有存储服务器炸了,我们在里边的钱是不是都丢了?
  6. Python编程基础:第五节 用户输入User Input
  7. 一步一步打造Geek风格的技术博客
  8. 基于 Flink 的严选实时数仓实践
  9. Python远程部署利器Fabric详解
  10. Spring Enable annotation – writing a custom Enable annotation