用debug tools for windows中的gflags配合VC2010除錯程式堆錯誤(如越界訪問)
阿新 • • 發佈:2018-12-21
下載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