PHP编程:调试PHP程序的多种方法介绍
《调试PHP程序的多种方法介绍》要点: 调试的定义:通过一定办法,在程序中找到并减少缺陷的数量,从而使其能正常工作. 一、PHP自带的调试功能PHP编程 1、自带的报错功能PHP编程 两个名词:开发环境是开发人员在进行开发和调试的环境,生产环境是最终客户在用的线上环境; (1)开发环境PHP编程 开发环境必要打开报错,以下是php.ini的配置项及其说明:
代码如下:
; This directive sets the error reporting level. ; Development Value: E_ALL | E_STRICT (Show all errors,warnings and notices including coding standards.) error_reporting = E_ALL | E_STRICT ; This directive controls whether or not and where PHP will output errors, 这样你在开发过程中,能第一时间发现差错.PHP编程 即使是一个低等级的报错“Notice: Undefined variable: a in E:phpspacetest.php on line 14”,但一个未定义的变量的使用往往隐藏着bug.PHP编程 你会问,如果我引进了开源的类库,他们抛出一堆的低等级错误怎么办?一般代码质量好的类库,也没有“Notice”级别的报错的.所以这也是鉴别一个类库质量的办法.PHP编程 (2)生产环境PHP编程 生产环境不克不及直接将错误输出,而是记入日志,以下是php.ini的配置项及其说明:
代码如下:
; It could be very dangerous in production environments. ; It's recommended that errors be logged on production servers rather than ; having the errors sent to STDOUT. display_errors = Off ; Besides displaying errors,PHP can also log errors to locations such as a ; Log errors to specified file. 当然日志写到文件里只是一个选择,还有其他配置可参考手册.PHP编程 生产环境是给客户提供服务的,你弗成能在上面进行断点、打印输出等操作,所以日志是不错的选择.PHP编程 2、其他一些语言特性、功能的使用PHP编程 (1)少用差错控制运算符“@”PHP编程 其的作用是,将“@”放置在一个PHP表达式之前,该表达式可能产生的任何差错信息都被忽略掉.PHP编程 如果一个缺陷发生在这个表达式中,从PHP的输出中看不到任何错误,这增加了调试的难度.所以能不消则不消.PHP编程 (2)有些函数自带有debug功能PHP编程 好比这行代码:
代码如下:
$fp = fsockopen(“www.example.com”,80,$errno,$errstr,30); 开发者调试时已经确定,$fp为空,连接失败,是这一行有问题,但是为什么连接失败?PHP编程 函数是php自带的,无法进行更深入的调试.所以一般这样的函数(主要是网络通信类的),会本身提供调试参数:$errno和$errstr.你可以加一句:
代码如下:
if (!$fp) echo “$errstr ($errno)<br />n”; 就能看到连接失败的原因了.PHP编程 这些函数有:fsockopen,pfsockopen,stream_socket_server,stream_socket_client 等.PHP编程 还有些函数是调试一个功能用的,好比:mysql_errno,socket_last_error,socket_strerror 等.PHP编程 这些只必要了解下,碰到能想到用即可.PHP编程 二、引进调试工具PHP编程 在遇到复杂问题时,可以借助调试工具.比拟成熟的有Xdebug、ZendDebugger.PHP编程 以Xdebug为例,它能够:控制打印输出的样式和数组层级、堆栈式的追踪差错、追踪函数调用、代码执行覆盖分析、程序的概要分析(Profiling)、远程调试.详见:http://xdebug.org/docs/.PHP编程 Xdebug前两个功能是对PHP原有的调试功能做了改进,更便利调试.PHP编程 复杂的问题,调试不出来的,可能是业务上的的问题,下面也有说业务逻辑的调试.PHP编程 三、调试业务逻辑差错PHP编程 当PHP脚本跑起来,没有任何错误,只能说它没有语法上的错误,但是不克不及说明它业务逻辑上没错误.PHP编程 很多业务逻辑的差错并不会反映在语法差错上,但调试的思路和PHP自带调试功能差不多.PHP编程 下面是一些办法.PHP编程 1、最基本的调试办法PHP编程 先确定两个东西:程序预期的结果、程序现在的不符合预期的结果; 你也可以借助Xdebug等工具,查看变量值的变化,或者设置断点进行调试.PHP编程 2、记录运行日志PHP编程 有些复杂或特殊的业务,用上面的办法不合适,比如:一个不能被打断的后台运行脚本.这些情况下记录运行日志比较合适.PHP编程 记日志的点要有所选择,除了业务上比拟重要的点,通常容易出错的地方有:网络连接和通信、系统权限问题等.PHP编程 3、单元测试PHP编程 以代码测试代码,而不是像第一点一样调试完会把测试代码丢掉.以测试驱动开发.PHP编程 这个话题比拟大,但适合放这里提一下.有兴趣的同学可以去了解.PHP编程 四、调试非功能性的差错PHP编程 非功能性错误,好比:内存溢出导致程序挂掉了、效率有问题导致程序非常慢、死循环了等等.PHP编程 这些问题,用“肉眼”检查代码效率太低了.PHP编程 所以可以借助调试工具做程序的概要阐发(Profiling),从中检查出程序的瓶颈所在.PHP编程 《调试PHP程序的多种方法介绍》是否对您有启发,欢迎查看更多与《调试PHP程序的多种方法介绍》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |