学习使用Devel模块的系统log调试法

说到调试,大家肯定都有很多心得,作为程序员,开发者,程序哪有不出问题的,出问题就要调试,常用的有Xdebug,XHProf,开启Devel模块并使用dpm等函数进行暴力调试,有的还可以借助Firephp在浏览器中的Console中输出错误信息,调试的方法和工具不胜枚举,这里只是跟大家分享一种我比较常用的方式。

Devel模块里有个函数叫drupal_debug(),简写是dd,可以接受两个参数,第一个是要调试的变量,第二个是一个标签,用来在log中标识和定位调试信息。用法和dpm差不多,想查看哪个变量就在对应的位置写下dd函数。那么在哪查看log呢,是在你的Drupal临时文件目录,一般我们会设置成/tmp,但也有可能设置成别的,所以最好用下面的Drush命令查看一下:

drush vget file_directory_temp

假设我们把临时目录设置成了/tmp,那么log文件的路径就是/tmp/drupal_debug.txt。唯一的不足是这里写死了文件名,所以多人调试会有冲突,如果是本地,那么最好每次都清空或者删除这个文件,这样log文件小一些,更便于发现问题。

如果是静态调试(刷新一次页面,看一次调试日志),那么你可以直接用编辑器打开:

vim /tmp/drupal_debug.txt

如果是动态调试(程序一边执行,一边查看调试日志),那么你需要用下面的命令:

tail -f /tmp/drupal_debug.txt

这种调试方法的优点,在于不会干扰页面正常显示输出,Firephp也能做到这一点,但Firephp还是增大了请求响应的输出内容,在某些场景下,还是以日志的方式搜集调试信息比较好。

其实watchdog从某种意义上讲,也可以把日志输出到系统或指定的日志文件,但默认是写到数据库里的,我们知道watchdog如果数据特别多会影响网站的性能,而清理的话,清理掉你的调试信息又会影响你对问题的调试诊断,而且所有的错误信息都输出到同一个地方,也不容易找到自己需要的日志。

所以,我还是推荐使用dd的调试方法,尤其是对一些难以调试的问题,推荐配合dpm和dd来进行调试。