第一次使用應(yīng)用程序驗(yàn)證程序時(shí),Visual Studio會(huì)提示你下載一個(gè)額外的DLL,此DLL將用于檢查句柄及堆,可能需要治理員權(quán)限來安裝這個(gè)補(bǔ)丁。  對(duì)應(yīng)用程序驗(yàn)證程序的大多數(shù)使用者來說,最難之處在于要記住運(yùn)行這個(gè)驗(yàn)證程序,而不是啟動(dòng)一次標(biāo)準(zhǔn)的調(diào)試會(huì)話。假定在使用驗(yàn)證程序時(shí),也可以使用標(biāo)準(zhǔn)調(diào)試,建議啟動(dòng)驗(yàn)證程序會(huì)話(Shift+Alt+F5),雖然比啟動(dòng)調(diào)試會(huì)話(F5)多按了兩個(gè)鍵,但還是值得的。這樣一來,就可以在每次產(chǎn)生調(diào)試會(huì)話時(shí),都充分利用驗(yàn)證程序了。  當(dāng)應(yīng)用程序驗(yàn)證程序探測到一個(gè)問題時(shí),它會(huì)停止執(zhí)行流程,并顯示一個(gè)如下的對(duì)話框,如圖2所示:
  圖2:驗(yàn)證程序停止信息  通常來說,診斷此類問題一般為查看能導(dǎo)致驗(yàn)證程序停止執(zhí)行的句柄、鎖、或堆指針信息,并回溯到崩潰發(fā)生之前的執(zhí)行點(diǎn)。然而,這不會(huì)總是最簡單的調(diào)試方法,在堆或文件崩潰是問題的唯一原因時(shí),你不一定記得起來要啟動(dòng)一個(gè)調(diào)試過程。  當(dāng)驗(yàn)證程序停止執(zhí)行流程時(shí),一個(gè)具體的問題描述也會(huì)被添加到任務(wù)視圖中,如圖3所示。任務(wù)視圖中的信息便于觀看,而圖2的對(duì)話框則需要先“消失”,開發(fā)者才能進(jìn)入到調(diào)試器檢查變量值。
  圖3:驗(yàn)證程序任務(wù)列表視圖  此處多說一下任務(wù)列表,它可顯示一個(gè)單獨(dú)的應(yīng)用程序驗(yàn)證程序窗口,其對(duì)停止事件提供了最具體的信息(見圖4)。
  圖4:驗(yàn)證程序窗口  應(yīng)用程序驗(yàn)證程序檢查  VSTS應(yīng)用程序驗(yàn)證程序主要專注于以下三個(gè)核心領(lǐng)域:操作系統(tǒng)句柄、鎖、堆內(nèi)存。以上三種類型的檢查,句柄是最簡單的——應(yīng)用程序驗(yàn)證程序會(huì)檢查句柄以保證它不為空(null)、句柄指向了正確的操作系統(tǒng)對(duì)象類型、句柄未用于DLLMain函數(shù)中的等待操作(這可是解決死鎖問題的最好方法)?! ℃i檢查就包括以下方面:  Ø 檢查初始化操作是否未完成或過頭了  Ø 釋放保持鎖的內(nèi)存或卸載相應(yīng)模塊  Ø 鎖是否具有非法所有者  Ø 已損壞的鎖  堆檢查也遵循上述兩種檢查的相近模式,將會(huì)檢查是否有損壞的堆、非法的堆刪除操作、非法的堆句柄、堆溢出?! ?STRONG>配置應(yīng)用程序驗(yàn)證程序  應(yīng)用程序驗(yàn)證程序需要進(jìn)行配置的地方非常少,如圖5所示:
  圖5:驗(yàn)證程序配置  除去可以把這三個(gè)主要的驗(yàn)證功能打開或關(guān)閉之外,你還可以與保護(hù)頁(guard page)一起使用堆驗(yàn)證,或直接指定堆保護(hù)頁的位置(保護(hù)頁提供了對(duì)崩潰最初的探測,以防止其占用更多的內(nèi)存)。堆保護(hù)頁的默認(rèn)位置為分配區(qū)域的末尾,它可以探測到緩沖區(qū)溢出;然而,假如想要探測非常罕見的某些緩沖區(qū)欠載(即底面通過),你也能把它挪到分配區(qū)域塊的起始處。  應(yīng)用程序驗(yàn)證工具是VSTS眾多工具中最輕易使用的一個(gè),只需簡單地選擇此菜單項(xiàng)就可以開始你的調(diào)試會(huì)話了,讓它來幫助你追蹤那些討厭的本機(jī)代碼問題吧。新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注