国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

用VSTS代碼驗(yàn)證工具捕捉C/C++錯(cuò)誤

2019-11-17 05:01:13
字體:
供稿:網(wǎng)友
  對(duì)一個(gè)C++本機(jī)代碼(Native Code)開發(fā)者來說,Visual Studio Team System對(duì)整個(gè)軟件開發(fā)周期都提供了支持,VSTS源代碼注釋使開發(fā)者在靜態(tài)代碼分析或單元測試中,可以用方法參數(shù)前置或后置的有效條件來注釋方法,且當(dāng)注釋違例時(shí),會(huì)有相應(yīng)的編譯器警告,所以,可以這樣說,VSTS提供了許多功能來幫助本機(jī)程序開發(fā)者。本文將著眼于VSTS驗(yàn)證程序,它是一個(gè)分析工具,用于監(jiān)控非托管代碼的執(zhí)行,并可以發(fā)現(xiàn)如不正確的內(nèi)存分配、句柄使用等等錯(cuò)誤?! ∨c此相比,動(dòng)態(tài)分析是檢查那些傳遞給系統(tǒng)函數(shù)的要害變量值,以發(fā)現(xiàn)問題的,當(dāng)方法被調(diào)用時(shí),將會(huì)探測到某些非法參數(shù),并上報(bào)給開發(fā)者;而使用非法參數(shù)時(shí),某些問題不能被發(fā)現(xiàn),只會(huì)在后續(xù)情況如內(nèi)存崩潰、非正常程序退出等情況顯現(xiàn)出來?! ?STRONG>以應(yīng)用程序驗(yàn)證程序開始  啟動(dòng)應(yīng)用程序驗(yàn)證程序是一件非常簡單的事,只需選擇“調(diào)試-以應(yīng)用程序驗(yàn)證程序開始”即可,如圖1所示?! D1:啟動(dòng)應(yīng)用程序驗(yàn)證程序  第一次使用應(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)試器檢查變量值。點(diǎn)擊放大此圖片  圖3:驗(yàn)證程序任務(wù)列表視圖  此處多說一下任務(wù)列表,它可顯示一個(gè)單獨(dú)的應(yīng)用程序驗(yàn)證程序窗口,其對(duì)停止事件提供了最具體的信息(見圖4)。點(diǎn)擊放大此圖片  圖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所示:點(diǎn)擊放大此圖片  圖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ī)代碼問題吧。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 扬州市| 汤原县| 渑池县| 沽源县| 淮阳县| 特克斯县| 涿鹿县| 福泉市| 武定县| 蛟河市| 泸定县| 如皋市| 云霄县| 泌阳县| 隆尧县| 西宁市| 云安县| 龙泉市| 关岭| 瑞金市| 射阳县| 平顶山市| 敖汉旗| 黄平县| 稷山县| 即墨市| 西吉县| 秦皇岛市| 洛隆县| 桂东县| 皮山县| 瓮安县| 资源县| 麻栗坡县| 绥德县| 鄂温| 吉安县| 武汉市| 乐平市| 彝良县| 宁晋县|