1. 程式人生 > >用debug tools for windows中的gflags配合VC2010除錯程式堆錯誤(如越界訪問)

用debug tools for windows中的gflags配合VC2010除錯程式堆錯誤(如越界訪問)

下載winstepsdk(gflags包含在其中)的ISO映象後,win10下需將檔案從ISO拷貝出來再安裝,切勿直接在ISO中執行安裝程式。推薦命令列方式執行gflags, 記得一定要以管理員身份執行cmd.exe。

1.在命令列中輸入以下命令指定預設偵錯程式為vsjitdebugger.exe:

cdb -iae

2.輸入以下命令繫結需要除錯的可執行程式,如dlg.exe(不需要絕對路徑 ):

gflags -p /enable dlg.exe

3.用VC編譯一個Debug版本的堆錯誤程式dlg.exe:

//其中出錯程式碼
char *p= new char[10];
for(int i= 0; i <= 11; ++i)
	p[i] = i;

4.VC除錯執行dlg.exe, 發現並沒有觸發中斷,修改出錯程式碼為:

char *p= new char[10];
for(int i= 0; i <= 16; ++i)
    p[i] = i;

再次除錯執行dlg.exe,我們看到了效果,程式碼中斷在p[i] = i;這一句。為何上一段程式碼不會產生中斷?那是因為VC Debug 模式下的new多分配了6個位元組導致。

除錯完後記得取消gflags對可執行程式的繫結,否則此程式將只能在VC裡以Debug方式執行。

gflags -p /disable dlg.exe