調(diào)試程序往往比編寫程序更浪費(fèi)時(shí)間,正如一些有經(jīng)驗(yàn)的程序員所說,軟件的開發(fā)應(yīng)該包括20%的程序編寫時(shí)間和80%的Debug時(shí)間。并且調(diào)試程序比編寫程序要難2倍。編寫巧妙的程序并不一定調(diào)試方便。
程序的調(diào)試有很多方法,比如最常見的VC之類的IDE都提供加斷點(diǎn),逐步執(zhí)行,逐段執(zhí)行的功能。但是這只能針對程序某個(gè)微小的片段,對于前期bug的范圍的界定并不是很方便。況且對于不滿IDE的臃腫,身陷Vim, notepad++, Editplus之類的編輯器之中,我們需要找到更加高效的程序調(diào)試和測試方法。
在程序執(zhí)行的關(guān)鍵點(diǎn)打印Log是一個(gè)非常高效的方法,如何打印log進(jìn)行程序調(diào)試呢? 以PHP程序開發(fā)為例,需要2個(gè)步驟:
1. PHP函數(shù)中兩個(gè)關(guān)鍵的打印變量的方法
print_r var_dump
所以我們可以在關(guān)鍵的地方打印需要的變量。
2. 收集我們在程序中打印的變量
我們可以把程序執(zhí)行過程中打印的變量逐條寫到文本文件里。在程序執(zhí)行完畢之后進(jìn)行分析,查找Bug,修正程序。
PHP中打印時(shí)間,和變量的程序片段:
function file_log($message) { global $file_log_location; ob_start(); echo date("Y-m-d H:i:s \t", time()); print_r($message); echo "\n"; $var = ob_get_contents(); ob_end_clean(); $open=@fopen($file_log_location,"a"); @fwrite($open,$var); fclose($open); }
應(yīng)用此段程序還需要對log的存儲位置 $file_log_location 賦值。
在需要的地方插入此片段,執(zhí)行PHP程序,就會得到所需信息。
但是假如是長時(shí)間運(yùn)行的程序如何在程序執(zhí)行的過程中就查看到log的信息?相信你已經(jīng)想到了可以在shell中用
tail -f /var/debug.log
這樣總可以看到程序吐出的最新的debug信息。
附件是Drupal中進(jìn)行debug的一個(gè)小的module,做drupal開發(fā)的同學(xué)可以嘗試一下。
雖然本文針對PHP開發(fā)所言,但是這種方法也適合python,java之類的動態(tài)語言的開發(fā)。
原文地址: http://blog.eood.cn/efficient_debugging_php_java_python
–EOF–
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
