Web开发调试方案分享 - PHP普通调试

  • 作者:KK

  • 发表日期:2016.2.23


PHP的调试最原始的笨方法肯定是到处echo和print_r啦,下面数一下它的缺点和解决办法

  1. 代码遗漏不好找

    有时候会在A文件echo一下,删除掉,去B文件echo一下,然后忘了删,去C文件echo一下

    调出效果来了,后来只删了C文件的echo代码,遗漏了B文件的

    然后过段时间才注意到页面的左上角还是哪个角(通常就在左上角)不知咋的多了个数字1或数字0,我还见过多了条SQL语句的,坑爹啊!

    然后全天下到处找这个echo在哪里执行的,就这样费了好大劲才找到这个echo给删除掉了

    你说用xdebug找?我暂时还没发现xdebug能记录echo语句呢,因为只记录函数的运行点嘛,而且,一般的程序员都不懂得用xdebug!

    • 解决办法

      1. 你的代码工具一般都有代码模板或者录制功能,录制以下代码的输入:

        print_r($var) . '<br/>';
        echo '' . __FILE__ . ':' . __LINE__;
        

        录制好后只要按快捷键重播,代码就自动打出来,你只要修改变量部分即可

      2. 用SVN和Git等进行代码管理,在代码提交前查看变更,或者将变更文件创建补丁,然后从补丁文件中搜索echo这样就快速了好多,但是如果已经提交了文件就不太方便了,你要记得提交的时间点或日志号才行,依我见大部分人不怎么用心去写提交日志,导致要查某个点的时候真的不知哪个才是他的某次提交


  2. 没排版

    直接print_r会没排版的你也懂

    • 解决办法

      用浏览器的源代码查看界面来看,改一次代码就可以在源代码界面直接F5刷新了


    由于一般新手不懂得源代码查看模式是有排版的(因为他们不知道源代码模式是不渲染HTML标签的,源代码原样显示,换行符就换行)

    所以很多经验浅的程序员会这样

    echo '<pre>';
    print_r(array(1,2,3));
    echo '</pre>';
    

    实际上他觉不觉得写那两句echo很费时间呢?要是不觉得我也服了...我很注重时间的利用率

    • 解决办法

      还是懒得进入源代码模式的话,就依然用快捷键/宏录制功能,把上面的代码录制好重播后只修改变量


  3. 在for循环里输出不易识别

    假设有10次以上for,那些输出就会都连成一行或者就算换了行也不容易找到边界线,需要手动echo一条分割线加个br,我暂时也没比较好的办法,你说录制吧,但录制太多东西真的不好记的


  4. 停止运行不方便

    要停止运行时还要手动多打句die;

    • 解决办法 这个呢我其实是靠录制的,将之前的代码录制下来,并且会在最后把die语句也录制一起,因为实际上大多数情况输出变量后都要终止运行的,不然会被一坨HTML干扰你查看变量值

      所以少部分情况才不需要终止程序,如果不需要终止时,我使用快捷键将代码弄出来后,删除最后的die语句就行了