PHP 代码执行出错了该怎么办?

我们在开发过程中,常常会遇到一些问题,一个函数体内出现了问题,如何追踪到代码呢?

当然,使用 PHP 自带的错误报告通常能解决大部分问题,那么如何开启 PHP 的调试报告呢?

在 php.ini 中找到 display_errors = Off 和 error_reporting = E_ALL,将 display_errors 设置为 On 即可。

当然,我们也可以开启 Web Server 的错误报告,假设是 apache 的话,要开启 PHP 的错误报告应该是在 httpd.conf 中添加如下行:

php_flag display_errors on
php_value error_reporting 2037

然而,这种错误报告经常有覆盖不到的地方,开发者应当经常性发现 PHP 在浏览器中莫名其妙就出现 500错误,并没有任何回显,在这种情况下,《编程珠玑》中介绍了两种调试方式,分别是:

  1. 断言
  2. 脚手架

断言,简单的来说就是在执行时加入如下语句assert(a == 1),这条语句的作用是,当 a == 1 时,它将不进行任何操作,而如果不符合条件,assert()函数将输出错误信息和调试信息,当然,assert()需要开发者自己实现。

《代码大全》列出了什么情况下使用断言:

  • 输入参数或输出参数的取值处于预期的范围内;
  • 子程序开始(或者结束)执行时文件或流是处于打开(或关闭)的状态;
  • 子程序开始(或者结束)执行时,文件或流的读写位置处于开头(或结尾);
  • 文件或流已用只读,只写或者可读可写方式打开;
  • 仅用于输入的变量的值没有被子程序修改;
  • 指针非空;
  • 传入子程序的数组或其他容器至少能容纳X个数据元素;
  • 表初始化,存储着真实的数值;
  • 子程序开始(或者结束)执行时,某个容器是空的(或满的);
  • 一个经过高度优化的复杂子程序的运算结果和相对缓慢但代码清晰的子程序的运算结果相一致;

那《代码大全》中对使用断言的指导建议是:

  • 用错误处理代码来处理预期会发生的情况,用断言来处理不应该发生的状况

脚手架的简单实现形式就是我们在 PHP 中常用的逐行var_dump($a),将变量输出以辨别程序执行的过程。在循环中尤其有用。

在 PHP5.4 之后,PHP 有了官方的调试工具,类似于 gdb 调试工具,叫 phpdbg。

当然,也可以使用现代化的调试工具,如Xdebug、ZendDebugger等。

最后要注意的一点,在正式版本中千万不要忘记移除测试代码,否则会有意想不到的后果发生。

共有 4 条评论

  1. 剪板机

    真好学习了

  2. 加气块设备

    感谢分享哦

  3. 网赚

    这个不错哦,我好好读读!

  4. 2292528618

    好好学习,天天向上

Top