首页 » SEO优化 » PHP调试bug技巧_作为轨范员你是若何有效的调试bug的

PHP调试bug技巧_作为轨范员你是若何有效的调试bug的

duote123 2024-12-14 0

扫一扫用手机浏览

文章目录 [+]

调试的定义:通过一定方法,在程序中找到并减少毛病的数量,从而使其能正常事情。

这里说一些如何调试PHP程序的履历。

PHP调试bug技巧_作为轨范员你是若何有效的调试bug的

一、PHP自带的调试功能

PHP调试bug技巧_作为轨范员你是若何有效的调试bug的
(图片来自网络侵删)

1、自带的报错功能

两个名词:开拓环境是开拓职员在进行开拓和调试的环境,生产环境是终极客户在用的线上环境;

开拓环境和生产环境要分开设置报错功能。

(1)开拓环境

开拓环境须要打开报错,以下是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,; notices and warnings too. Error output is very useful during development.; Development Value: Ondisplay_errors = On

这样你在开拓过程中,能第一韶光创造缺点。

纵然是一个低等级的报错“Notice: Undefined variable: a in E:\phpspace\test.php on line 14”,但一个未定义的变量的利用每每暗藏着bug。

你会问,如果我引进了开源的类库,他们抛出一堆的低等级缺点怎么办?一样平常代码质量好的类库,也没有“Notice”级别的报错的。
以是这也是鉴别一个类库质量的方法。

(2)生产环境

生产环境不能直接将缺点输出,而是记入日志,以下是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; server-specific log, STDERR, or a location specified by the error_log; directive found below. While errors should not be displayed on productions; servers they should still be monitored and logging is a great way to do that.; Production Value: Onlog_errors = On; Log errors to specified file.error_log = /path/to/php_error.log

当然日志写到文件里只是一个选择,还有其他配置可参考手册。

生产环境是给客户供应做事的,你不可能在上面进行断点、打印输出等操作,以是日志是不错的选择。

2、其他一些措辞特性、功能的利用

(1)少用缺点掌握运算符“@”

其的浸染是,将“@”放置在一个PHP表达式之前,该表达式可能产生的任何缺点信息都被忽略掉。

如果一个毛病发生在这个表达式中,从PHP的输出中看不到任何缺点,这增加了调试的难度。
以是能不用则不用。

(2)有些函数自带有debug功能

比如这行代码:

$fp = fsockopen(“www.example.com”, 80, $errno, $errstr, 30);

开拓者调试时已经确定,$fp为空,连接失落败,是这一行有问题,但是为什么连接失落败?

函数是php自带的,无法进行更深入的调试。
以是一样平常这样的函数(紧张是网络通信类的),会自己供应调试参数:$errno和$errstr。
你可以加一句:

if (!$fp) echo “$errstr ($errno)<br />\n”;

就能看到连接失落败的缘故原由了。

这些函数有:fsockopen,pfsockopen,stream_socket_server,stream_socket_client 等。

还有些函数是调试一个功能用的,比如:mysql_errno,socket_last_error,socket_strerror 等。

这些只须要理解下,碰到能想到用即可。

二、引进调试工具

在碰着繁芜问题时,可以借助调试工具。
比较成熟的有Xdebug、ZendDebugger。

以Xdebug为例,它能够:掌握打印输出的样式和数组层级、堆栈式的追踪缺点、追踪函数调用、代码实行覆盖剖析、程序的概要剖析(Profiling)、远程调试。
详见:http://xdebug.org/docs/。

Xdebug前两个功能是对PHP原有的调试功能做了改进,更方便调试。

繁芜的问题,调试不出来的,可能是业务上的的问题,下面也有说业务逻辑的调试。

三、调试业务逻辑缺点

当PHP脚本跑起来,没有任何缺点,只能说它没有语法上的缺点,但是不能解释它业务逻辑上没缺点。

很多业务逻辑的缺点并不会反响在语法缺点上,但调试的思路和PHP自带调试功能差不多。

下面是一些方法。

1、最基本的调试方法

先确定两个东西:程序预期的结果、程序现在的不符合预期的结果;

探求与两种结果干系的代码片段;

阅读这些代码片段,考试测验以“肉眼”找出错误;

找不出,则须要输出一些关键变量,通过检讨它们的值是否精确来判断是哪里发生了缺点;

多少次考试测验,终极你可以确定缺点发生在哪个点。

你也可以借助Xdebug等工具,查看变量值的变革,或者设置断点进行调试。

2、记录运行日志

有些繁芜或分外的业务,用上面的方法不得当,比如:一个不能被打断的后台运行脚本。
这些情形下记录运行日志比较得当。

记日志的点要有所选择,除了业务上比较主要的点,常日随意马虎出错的地方有:网络连接和通信、系统权限问题等。

3、单元测试

以代码测试代码,而不是像第一点一样调试完会把测试代码丧失落。
以测试驱动开拓。

这个话题比较大,但适宜放这里提一下。
有兴趣的同学可以去理解。

四、调试非功能性的缺点

非功能性缺点,比如:内存溢出导致程序挂掉了、效率有问题导致程序非常慢、去世循环了等等。

这些问题,用“肉眼”检讨代码效率太低了。

以是可以借助调试工具做程序的概要剖析(Profiling),从中检讨出程序的瓶颈所在。

标签:

相关文章

大数据火花,驱动新时代科技创新的引擎

大数据时代,信息爆炸、数据洪流已成为常态。在这个时代背景下,大数据技术应运而生,被誉为新时代科技创新的引擎。本文将从大数据的内涵、...

SEO优化 2024-12-16 阅读0 评论0

大数据炼铁,引领钢铁行业智能化转型

随着我国经济的快速发展,钢铁行业作为国民经济的重要支柱产业,正面临着转型升级的关键时期。大数据炼铁作为一种新兴的炼铁技术,以其高效...

SEO优化 2024-12-16 阅读0 评论0

大数据监所,智慧时代的安防新篇章

随着科技的飞速发展,大数据技术在各个领域的应用日益广泛,尤其在安防领域,大数据监所的兴起为智慧城市建设提供了有力支撑。本文将从大数...

SEO优化 2024-12-16 阅读0 评论0

大数据瞳孔,开启智慧医疗新时代

随着科技的飞速发展,大数据技术在各个领域的应用日益广泛。其中,大数据瞳孔技术在医疗领域的应用,为人类健康带来了前所未有的便利。本文...

SEO优化 2024-12-16 阅读0 评论0