欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > 网站制作教程 >

php程序调试方法总结

发表于2019-04-25 09:36| 次阅读| 来源网络整理| 作者session

摘要:php程序调试方法总结

php程序调试方法总结

  相信很多冤家们都有调试程序的教训,但是很多时分调试程序是痛苦而又漫长的过程;它不只需求认真,更需求耐烦,切忌心浮气躁。然而当找出成绩并顺利处理它时,又会给人无比冲动的喜悦。这里总结一下笔者在程序调试中的利用的准则,工具,以及方法。这里需求阐明的是,某些准则性的货色,各种言语都是差不多的,而触及到详细的工具和某些详细的调试方法,这里只触及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扩充了