PHP代码调试

缺乏、安全感 2022-07-16 02:23 420阅读 0赞

PHP语言没有多线程、同步等概念,大多由函数和类组成,数据类型和语法比较简单,利用其丰富的内置函数就可以实现大部分的调试功能。因此,PHP代码比较容易理解,也很容易调试。

php代码调试的实现方式主要有两种:通过PHP的调试函数实现和通过断点调试工具实现。

1. PHP的调试函数

对于一般的PHP代码,使用几个常用的输出函数就可实现代码调试。常用的函数有echo、print、print_r、var_dump、var_export、die、exit等等。

其中,echo 和 var_dump 最常用。

如果要在输出变量的值后终止流程,可使用 die 或 exit 语句。die 和 exit 在功能上基本是等价的,都是语句结构,而不是函数。下面的写法都是正确的:

exit;

exit();

exit(0);

exit(‘程序中止!’);

2. 断点调试

一般情况下,利用PHP的输出函数就能轻松调试大多数问题,但是有时,还需要更强大有效的调试手段,这就需要利用一些支持断点调试的工具。

断点调试,也叫单步调试,是指程序开发中,为了找到程序的bug,通常采用的一种调试手段,一步一步自动跟踪程序执行的流程,根据变量的值,找到错误的原因。

很多集成的开发工具(IDE),如Zend Studio、PhpStorm等,都支持断点调试,在需要调试的代码行设置断点,然后按预设的快捷键步进。

当代码涉及到很多文件时,比如在MVC中,Controller层的代码可能会设计很多个文件,这些文件包括框架的核心配置初始化文件、类文件、路由控制文件等,如果用手工调试会比较累。另外,某些应用可能比较复杂,我们并不清楚流程是怎样的,也不知道究竟哪一步出了问题,该去哪里追踪变量。如果用手工方法一步一步地输出变量,调试的效率就会很低。在这些情况下,就轮到断点调试工具上场了。

常用的调试工具有 zend debuger 和 xdebug,据说 zend debugger 不支持php5.3以上的版本,故这里我们只讲解 xdebug 调试器的使用。

以Windows系统为例,到 xdebug 官网( http://xdebug.org/download.php)下载和PHP版本对应的xdebug扩展,要注意xdebug扩展所适用的PHP版本号、TS(线程安全)版还是NTS(非线程安全)版,以及VC6版本还是VC9版本,这些都应该和安装的PHP对应,否则可能出现问题。

下载和PHP对应的xdebug扩展后,将php_xdebug.dll文件放到php的ext扩展目录下,编辑php.ini配置文件,增加下面的配置:

  1. [XDebug]
  2. ; 用中括号括起来的是模块名称,它会在你的phpinfo信息中作为分隔标题显示出来
  3. zend_extension = "E:\xampp\php\ext\php_xdebug.dll"
  4. ; 设置php_xdebugDLL文件路径
  5. xdebug.auto_trace=On
  6. ; php对函数调用的监测信息用文件格式输出
  7. xdebug.collect_params=On
  8. ; php对函数调用的参数加入到函数过程调用的监测中
  9. xdebug.collect_return=On
  10. ; 将函数调用的返回值加入到函数过程调用的监测中
  11. xdebug.profiler_append = 0
  12. xdebug.profiler_enable = 1
  13. ; 这是效能监测的设置开关
  14. xdebug.profiler_enable_trigger = 0
  15. xdebug.profiler_output_dir = "E:\xampp\tmp"
  16. ;这是效能监测信息开启的情况下,写入到profiler_output_dir设置的路径中,会生成一个相应的文件
  17. xdebug.profiler_output_name = "cachegrind.out.%t-%s"
  18. xdebug.remote_enable = 1
  19. ; 开启远程调试
  20. xdebug.remote_handler = "dbgp"
  21. xdebug.remote_host = "127.0.0.1"
  22. ; 远程主机地址
  23. xdebug_remote_port=9000
  24. ; 主机的端口
  25. xdebug.trace_output_dir = "E:\xampp\tmp"
  26. ;设置的函数调用监测信息的输出路径

其实,在xampp中的php已经包含了对应版本的xdebug扩展,只不过,在php.ini配置文件中,关于该扩展的配置项都加了注释,我们只需修改php.ini,将注释取消即可,也就是删除代码行行首的分号注释符,修改后的配置项如下:
[XDebug]
zend_extension = “E:\xampp\php\ext\php_xdebug.dll”
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = “E:\xampp\tmp”
xdebug.profiler_output_name = “cachegrind.out.%t-%s”
xdebug.remote_enable = 0
xdebug.remote_handler = “dbgp”
xdebug.remote_host = “127.0.0.1”
xdebug.trace_output_dir = “E:\xampp\tmp”
保存php.ini后,重启web服务器。打印phpinfo,在输出的信息页面,查找字符串xdebug,如果有如下信息,就说明php的xdebug扩展开启成功。

Center

xdebug安装成功后,我们还需要对集成开发工具(如Zend Studio)进行配置,使其默认使用 xdebug 调试器进行断点调试。

关于如何在 Zend Studio 中配置和使用 xdebug 断点调试工具,可参考: http://blog.csdn.net/lamp_yang_3533/article/details/52661749

发表评论

表情:
评论列表 (有 0 条评论,420人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PHP代码调试

    PHP语言没有多线程、同步等概念,大多由函数和类组成,数据类型和语法比较简单,利用其丰富的内置函数就可以实现大部分的调试功能。因此,PHP代码比较容易理解,也很容易调试。 p

    相关 php调试: Eclipse + xampp

    在windows下调试php弄了半天,在网上也查了,大多版本过久,没起作用,好不容易最后弄好了。 主要参考以下两篇文章: [http://www.laokboke.net/

    相关 如何调试php

    一个好的代码调试器可以让你在解决问题的时候事半功倍,因为代码调试器可以设置断点,可以逐行逐行代码进行跟踪,可以查看变量的值等等优点。每一种开发语言都有很好的代码调试器,PHP也