Visual Studio Debug實(shí)戰(zhàn)教程之基礎(chǔ)入門
前言
在過(guò)去,我已經(jīng)寫過(guò)好幾篇關(guān)于調(diào)試 / debug / 解 Bug 的文章,但都是從宏觀的角度上去講的,并沒(méi)有針對(duì)哪種工具做具體深入的剖析。
在軟件開(kāi)發(fā)周期中,測(cè)試和修正缺陷(defect,defect與bug的區(qū)別:Bug是缺陷的一種表現(xiàn)形式,而一個(gè)缺陷是可以引起多種Bug的)的時(shí)間遠(yuǎn)多于寫代碼的時(shí)間。通常,debug是指發(fā)現(xiàn)缺陷并改正的過(guò)程。修正缺陷緊隨debug之后,或者說(shuō)二者是相關(guān)的。如果代碼中存在缺陷,我們首先要識(shí)別造成缺陷的根本原因(root cause),這個(gè)過(guò)程就稱作調(diào)試(debugging)。找到根本原因后,就可以修正缺陷。
工欲善其事,必先利其器,一個(gè)強(qiáng)大的調(diào)試工具可以幫助我們快速的發(fā)現(xiàn)問(wèn)題、解決問(wèn)題。而能不能很好的利用這些工具則是菜鳥(niǎo)程序員和高手程序員在工作方法上的一大區(qū)別。
所以,接下來(lái),我打算從我最熟悉也是用戶體量最大的 Visual Studio 開(kāi)始入手,動(dòng)手寫關(guān)于 Debug 的系列教程。
Visual Studio提供了很多用于調(diào)試的工具。有時(shí)調(diào)試需要花費(fèi)大量時(shí)間去識(shí)別root cause。VS提供了許多輔助調(diào)試的便捷的工具。調(diào)試器(Debugger)包含錯(cuò)誤列表、添加斷點(diǎn)、可視化的程序流程、控制執(zhí)行流程、Data Tips、監(jiān)視窗口(watch windows)、多線程調(diào)試、線程窗口、并行調(diào)試概覽以及IntelliTrace調(diào)試概覽。我希望本文能夠?qū)φ{(diào)試功能的使用者有所裨益。
雖說(shuō) MSDN 上已經(jīng)啥都有了,但是赤裸裸的英文世界還是擋住了不少的開(kāi)發(fā)者,這里我希望能用最平實(shí)易懂的語(yǔ)言讓大家快速上手 VS 的調(diào)試功能。
它適用于 C#,C/C ++,Visual Basic,JavaScript 等大部分 VS 支持的編程語(yǔ)言。
說(shuō)明一下,此教程主要參考 MSDN,但同時(shí)也添加了我自身在使用過(guò)程中積累的一些經(jīng)驗(yàn)。
好了,廢話不多說(shuō),進(jìn)入主題。
本次教程將介紹 Visual Studio 入門階段的一些 Debug 功能。
與大多數(shù) IDE 一樣,Visual Studio 有兩個(gè)調(diào)試階段:
- 一是發(fā)現(xiàn)并解決 Build 過(guò)程中的項(xiàng)目和編譯錯(cuò)誤。
- 二是發(fā)現(xiàn)并解決 Run 過(guò)程中的動(dòng)態(tài)錯(cuò)誤。
Build 階段
Build Solution
Build 一個(gè) Solution 先從配置開(kāi)始。
Solution 的配置有兩種基本類型: Debug 和 Release。
它們的區(qū)別如下:
| Debug | Release |
| 生成的可執(zhí)行文件未經(jīng)優(yōu)化,大而慢,內(nèi)含開(kāi)發(fā)人員添加的調(diào)試信息,不會(huì)被投入市場(chǎng)使用。 | 生成的可執(zhí)行文件經(jīng)過(guò)了優(yōu)化,小而快,可以被投入市場(chǎng)使用。 |
默認(rèn)配置為 Debug。

除此之外,還可以指定目標(biāo)平臺(tái),如 x86(32 位 Intel CPU)、x64(64 位 Intel CPU)和 ARM(ARM CPU,僅支持某些應(yīng)用類型)。
若要更改此值,請(qǐng)單擊平臺(tái)下拉列表,選擇其他平臺(tái)或「配置管理器...」
配置好工程之后,就可以開(kāi)始 Build 了。
最簡(jiǎn)單的方法是按下 F7,也可以在菜單中選擇 Build Solution。
2、Output 窗口
Build 過(guò)程及其結(jié)果將顯示在 Output 窗口。
這里會(huì)顯示原始編譯器輸出,如Error,Warning 等。可以單擊 Error 或 Warning 轉(zhuǎn)到對(duì)應(yīng)的代碼行。
這是一個(gè) Build 成功的例子。
3、Error List 窗口
Build 過(guò)程中出現(xiàn)的 Error 和 Warning 的詳細(xì)信息可以在 Error List 窗口中查看。

單擊某一項(xiàng) Error 或者 Warning,可以轉(zhuǎn)到對(duì)應(yīng)的發(fā)生 Error 或者 Warning 的代碼行。
如上圖,紅色波浪線代表了 Error ,可以將鼠標(biāo)懸停在上方獲取出現(xiàn)此 Error 的詳細(xì)信息。
有的時(shí)候,并不是所有的 Error 你一眼就能看出其中的問(wèn)題,可能會(huì)出現(xiàn)一些只對(duì)編譯器才有意義的術(shù)語(yǔ)或者代碼,例如:
fatal error C1189: #error ...
此時(shí),很多人的做法是把這段話復(fù)制粘貼到百度/谷歌搜索欄再去搜索。其實(shí)你未必要去做這樣的重復(fù)勞動(dòng)。
也許你不知道,VS 自帶了搜索功能。
在相應(yīng)的 Error 或者 Warning 條目上右擊,會(huì)出現(xiàn)一個(gè)菜單,點(diǎn)擊 Show Error Help,將自動(dòng)執(zhí)行該 Error 或者 Warning 的 Bing 搜索。
另外,也可以點(diǎn)擊 Code 列中的錯(cuò)誤代碼超鏈接,如 CS1525,同樣會(huì)執(zhí)行該錯(cuò)誤代碼的 Bing 搜索。
一一查看并解決 Error List 中出現(xiàn)的所有的 Error,Rebuild Solution 直至成功生成解決方案。
4、代碼靜態(tài)分析
解決了 Build 過(guò)程中 Error List 出現(xiàn)的所有 Error 之后,可以嘗試執(zhí)行代碼靜態(tài)分析。
代碼靜態(tài)分析會(huì)去分析代碼中可能的導(dǎo)致運(yùn)行時(shí)錯(cuò)誤等問(wèn)題,并給出 Warning。
不要覺(jué)得沒(méi) Erorr 了,Build 成功了,就萬(wàn)事大吉了,在一開(kāi)始的時(shí)候,盡量解決代碼中出現(xiàn)的 Warning,可以省去將來(lái)不必要的麻煩。
可以按快捷鍵 Alt+F11 也可以點(diǎn)擊如下菜單,執(zhí)行代碼靜態(tài)分析。
Warning 同樣出現(xiàn)在 Error List 窗口,點(diǎn)擊 「 Warning」選項(xiàng)卡查看。
跳轉(zhuǎn)至出現(xiàn) Warning 的代碼行。綠色波浪線代表了 Warning,可將鼠標(biāo)懸停在上方獲取詳細(xì)信息。
Run 階段
5、基本操作
Build Solution 成功以后,按下 F5 執(zhí)行,這將在 Debug 環(huán)境中啟動(dòng)程序。
此時(shí)默認(rèn)出現(xiàn)兩個(gè)窗口。
按下 Break 或 Stop 按鈕來(lái)暫?;蛲V钩绦?。
按下 Continue 按鈕繼續(xù)執(zhí)行程序。
6、設(shè)置斷點(diǎn)
設(shè)置斷點(diǎn)是 Debug 過(guò)程最最最常用的功能。
斷點(diǎn)指示 VS 在執(zhí)行到哪一行代碼的時(shí)候掛起。程序掛起的時(shí)候,可以查看任意你想看的東西,如變量值,內(nèi)存,代碼執(zhí)行分支等。
設(shè)置斷點(diǎn)很簡(jiǎn)單,只要在編輯區(qū)的邊緣單擊一下或者在相應(yīng)的代碼行按下 F9,旁邊就會(huì)出現(xiàn)一個(gè)紅色圓點(diǎn),這個(gè)紅色圓點(diǎn)就代表了斷點(diǎn)。
設(shè)置好斷點(diǎn),按下 F5,程序即會(huì)在斷點(diǎn)處停下來(lái)。
動(dòng)圖在這里。
接下來(lái),常用的幾個(gè)操作是:
| F10 | step over code | 單步執(zhí)行 |
| F11 | step into code | 跳轉(zhuǎn)至內(nèi)層函數(shù) |
| Shift+F11 | step out code | 從當(dāng)前函數(shù)中跳出 |
可以設(shè)置多個(gè)斷點(diǎn),在 F5,F(xiàn)10 等快捷鍵之間切換,轉(zhuǎn)到不同的斷點(diǎn)。
7、查看變量
程序執(zhí)行到斷點(diǎn)處,停下來(lái)的時(shí)候,可以查看代碼中的變量,堆棧調(diào)用情況等,看下它們是不是在預(yù)期的范圍內(nèi)。
將鼠標(biāo)懸停在變量上面,可以看到它此刻的值。
再放個(gè)動(dòng)圖,更清楚一點(diǎn)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
ASP.NET?Core中使用滑動(dòng)窗口限流的問(wèn)題及場(chǎng)景分析
這篇文章主要介紹了ASP.NET?Core中使用滑動(dòng)窗口限流的問(wèn)題,主要介紹服務(wù)限流場(chǎng)景中的應(yīng)用,如何使用滑動(dòng)窗口來(lái)解決這個(gè)問(wèn)題,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-12-12
服務(wù)器讀取EXCEL不安裝OFFICE如何實(shí)現(xiàn)
用asp.net做了一簡(jiǎn)單的游戲管理后臺(tái),涉及到了上傳Excel導(dǎo)入數(shù)據(jù)的功能,在本地開(kāi)發(fā)實(shí)現(xiàn)都好好的,可已上傳的服務(wù)器上就悲劇了,下面有個(gè)不錯(cuò)的解決方法,大家可以參考下2014-03-03
在.net中用CheckBoxList實(shí)現(xiàn)單選
用CheckBoxList實(shí)現(xiàn)單選的原因是我覺(jué)得CheckBoxList控件頁(yè)面展示效果要好看一些,需要的朋友可以參考下2014-02-02
EF使用Code First模式給實(shí)體類添加復(fù)合主鍵
這篇文章介紹了EF使用Code First模式給實(shí)體類添加復(fù)合主鍵的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
visual studio 2012安裝配置方法圖文教程 附opencv配置教程
這篇文章主要為大家分享了visual studio 2012安裝配置方法圖文教程,文中附opencv配置教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
利用.net控件實(shí)現(xiàn)下拉導(dǎo)航菜單制作的具體方法
這篇文章介紹了利用.net控件實(shí)現(xiàn)下拉導(dǎo)航菜單制作的具體方法,有需要的朋友可以參考一下,希望對(duì)你有所幫助2013-07-07
IE下document.referrer 拒絕訪問(wèn)的解決方法
原理就是給IE瀏覽器的頁(yè)面偷偷加了個(gè)鏈接,然后自動(dòng)點(diǎn)這個(gè)鏈接,于是referrer就能保留了,感興趣的朋友可以參考下2013-09-09
Coolite Cool Study 1 在Grid中用ComboBox 來(lái)編輯數(shù)據(jù)
作為Coolite的第一個(gè)教程,我想展現(xiàn)給大家能夠體現(xiàn)Coolite強(qiáng)大的例子(當(dāng)然也比官方例子稍微復(fù)雜一點(diǎn))。2009-05-05

