Web开发调试方案分享 - PHP普通调试 ¶
作者:KK
发表日期:2016.2.23
PHP的调试最原始的笨方法肯定是到处echo和print_r啦,下面数一下它的缺点和解决办法
代码遗漏不好找
有时候会在A文件echo一下,删除掉,去B文件echo一下,然后忘了删,去C文件echo一下
调出效果来了,后来只删了C文件的echo代码,遗漏了B文件的
然后过段时间才注意到页面的左上角还是哪个角(通常就在左上角)不知咋的多了个数字1或数字0,我还见过多了条SQL语句的,坑爹啊!
然后全天下到处找这个echo在哪里执行的,就这样费了好大劲才找到这个echo给删除掉了
你说用xdebug找?我暂时还没发现xdebug能记录echo语句呢,因为只记录函数的运行点嘛,而且,一般的程序员都不懂得用xdebug!
解决办法
你的代码工具一般都有代码模板或者录制功能,录制以下代码的输入:
print_r($var) . '<br/>'; echo '' . __FILE__ . ':' . __LINE__;
录制好后只要按快捷键重播,代码就自动打出来,你只要修改变量部分即可
用SVN和Git等进行代码管理,在代码提交前查看变更,或者将变更文件创建补丁,然后从补丁文件中搜索
echo
这样就快速了好多,但是如果已经提交了文件就不太方便了,你要记得提交的时间点或日志号才行,依我见大部分人不怎么用心去写提交日志,导致要查某个点的时候真的不知哪个才是他的某次提交
没排版
直接print_r会没排版的你也懂
解决办法
用浏览器的源代码查看界面来看,改一次代码就可以在源代码界面直接F5刷新了
由于一般新手不懂得源代码查看模式是有排版的(因为他们不知道源代码模式是不渲染HTML标签的,源代码原样显示,换行符就换行)
所以很多经验浅的程序员会这样
echo '<pre>'; print_r(array(1,2,3)); echo '</pre>';
实际上他觉不觉得写那两句echo很费时间呢?要是不觉得我也服了...我很注重时间的利用率
解决办法
还是懒得进入源代码模式的话,就依然用快捷键/宏录制功能,把上面的代码录制好重播后只修改变量
在for循环里输出不易识别
假设有10次以上for,那些输出就会都连成一行或者就算换了行也不容易找到边界线,需要手动echo一条分割线加个br,我暂时也没比较好的办法,你说录制吧,但录制太多东西真的不好记的
停止运行不方便
要停止运行时还要手动多打句
die;
解决办法 这个呢我其实是靠录制的,将之前的代码录制下来,并且会在最后把die语句也录制一起,因为实际上大多数情况输出变量后都要终止运行的,不然会被一坨HTML干扰你查看变量值
所以少部分情况才不需要终止程序,如果不需要终止时,我使用快捷键将代码弄出来后,删除最后的die语句就行了