1、 調試bug的幾種方法
1)排除法,可是通過逐段註釋代碼,運行程序,可問題是否重現。如果註釋某段代碼後,問題消失,則可將問題定位到該段代碼。
2)加強條件法,如果一個問題需要很長時間才能復現,則可以猜測問題的所在,加強其條件,比如增加其循環次數,縮短其每次運行時間間隔等,讓其快速復現。
3)單獨提取——模擬條件法,如果一個問題的出現依賴其他模塊給予初始值或者需要等待其他模塊的返回結果,則可考慮將其單獨提出,直接給出讓其觸發的條件,忽略其他不相關的代碼,讓其快速復現。
2、 VC下檢查內存泄漏的方法
第一步,添加如下預編譯指令。
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
第二步,在主函數中添加如下代碼,且作爲main函數的第一條語句。
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF |_CRTDBG_LEAK_CHECK_DF);
第三步,Start(不是Start Without Debugging)
從Output窗口中可觀察到內存泄漏相關信息。
Detected memory leaks!
Dumping objects ->
{53} normal block at 0x00373F60, 100 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CDCD
Object dump complete.
就上例而言,可以在main中插入如下代碼,作爲第二行:
_crtBreakAlloc = 53; //其中53爲內存分配編號
然後Start,到斷點時,彈出一個對話框,選擇“Break”,然後Step Out(可能需要多次),定位分配內存的代碼。
之後,單步執行,設法找到何處漏釋放內存了。
VS 2008 可以選用prefast選項
3、 關於測試
如果是全新的項目,則測試時需要編寫樁函數,即模擬其他分系統、其他模塊的應答或者請求。
如果是在原項目的基礎上增加功能,則往往不需要編寫樁函數,因爲其他分系統、其他模塊的應答或者請求是現成的,直接用就可以。