当我们还在使用print_r、var_dump、echo和exit这些命令进行一些中间参数的调试输出,并且乐此不疲的时候,或许我们不知道,我们的效率有多么低下,开发中有带来了多大的不便。
尽管很多优秀的系统在开发中特意设置了debug mode或专门的debug function,但这些并没有实质性的改善我们开发中远程调试工作的纷繁芜杂,尽管我们可以很负责任的说:一个优秀的系统需要长期的测试、调试来改善其性能,优化其算法,但也许我们花费的时间和所付出的劳动成倍却并没有取得多少的成效,当然我不是赞成在工作中的投机取巧,我是反对在工作中浪费时间,我们诸多的同仁们成天的“徜徉”在代码的海洋里,废寝忘食,认真的甚至有些不可理喻,我不知道这样做的效率到底是多少?
Zend Studio的远程调试功能是我们日常开发工作中一项颇为重要的功能,本文服务器端采用轻量级的zend debugger,我们先来看一个简单的例子:
- <?php
- $i=0;
- do{
- echo $i++;
- }
- while($i<0);
- $i=0;
- while($i<0){
- echo $i++;
- }
- ?>
当我们非常觉得书上的说辞过于抽象我晦涩的时候,我们怎么才能比较直观的知道这两段代码的执行流程是怎样的呢?下面我们来试试zend studio(下简称zde)。
我先将上述代码用zend studio保存于本机的http://localhost:8080/myphppro/debug.php位置,在zde中,选择远程调试菜单或工具菜单下的【调试URL...】命令,当然更方便也是本人最为推崇的方法是按F8,打开如图1的调试URL对话框。
在浏览器打开位置中填写http://localhost:8080/myphppro/debug.php,点击确定,就启动了调试会话,如图2:
我们看到,变量窗口中除了几个超全局变量以外,无他。这时我们按F10一次,光标就停留在了第4行(这就印证了书上说的do{}while型循环为“后判断型循环”的说法),并且变量窗口出现了$i=(int)0,类型和值同时列出,相当详细,如图3所示:
这里甚至可以对$i进行重新赋值。再按一次F10,这时光标跳到了第7行,继续按一下F10,光标到了第8行执行while循环前的判断,再按F10,这时光标直接跳到了程序结尾,这也印证书上说的“while循环前先判断”的说法,再次按下F10就结束远程调试,输出结果了,这时Zend studio自动退出调试环境,我们这次的远程调试历程也就结束了。应该是非常清晰的。
当然除了F10逐过程(所谓“逐过程”即遇到自定义函数、类或include包含文件时,直接步过执行到下一行)的调试执行,还有Ctrl+F5的无中断执行(遇到断点不中断),F5执行(遇断点即中断),F11逐语句执行,Shift+F10转到光标处(让程序执行到光标处中断),等等一些远程调试执行方式,可以根据实际情况选择。
这里补充讲一下变量赋值的问题,当我们要改变程序执行过程中的中间值的时候,可以使用赋值命令(见图3),赋值的时候要注意类型,当我们需要将123作为字符串复制给一个变量时,需要给它加上引号,如'123',数组赋值可以使用array()函数,另外,还有其他有趣的方法,等待您的摸索了。
【编辑推荐】