C#中利用斷點(diǎn)操作調(diào)試程序的步驟詳解
Visual Studio調(diào)試器調(diào)試
我們大家都知道,當(dāng)代碼不能正常運(yùn)行時(shí),可以通過(guò)調(diào)試定位錯(cuò)誤。常用的程序調(diào)試操作包括設(shè)置斷點(diǎn)、開(kāi)始、中斷和停止程序的執(zhí)行、單步執(zhí)行程序以及使程序運(yùn)行到指定的位置。下面將對(duì)這幾種常用的程序調(diào)試操作進(jìn)行詳細(xì)地介紹。話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
1.?dāng)帱c(diǎn)操作
斷點(diǎn)通知調(diào)試器,使應(yīng)用程序在某點(diǎn)上(暫停執(zhí)行)或某情況發(fā)生時(shí)中斷。發(fā)生中斷時(shí),稱程序和調(diào)試器處于中斷模式。進(jìn)入中斷模式并不會(huì)終止或結(jié)束程序的執(zhí)行,所有元素(如函數(shù)、變量和對(duì)象)都保留在內(nèi)存中。執(zhí)行可以在任何時(shí)候繼續(xù)。
插入斷點(diǎn)有3種方式:在要設(shè)置斷點(diǎn)的代碼行旁邊的灰色空白中單擊;右鍵單擊要設(shè)置斷點(diǎn)的代碼行,在彈出的快捷菜單中選擇“斷點(diǎn)”→“插入斷點(diǎn)”命令,如圖11.4所示;單擊要設(shè)置斷點(diǎn)的代碼行,選擇菜單中的“調(diào)試”→“切換斷點(diǎn)(G)”命令,如圖11.5所示。
圖11.4 右鍵快捷菜單插入斷點(diǎn)
圖11.5 菜單欄插入斷點(diǎn)
插入斷點(diǎn)后,就會(huì)在設(shè)置斷點(diǎn)的行旁邊的灰色空白處出現(xiàn)一個(gè)紅色圓點(diǎn),并且該行代碼也呈高亮顯示,如圖11.6所示。
圖11.6 插入斷點(diǎn)后效果圖
刪除斷點(diǎn)主要有3種方式,分別如下:
(1)可以單擊設(shè)置了斷點(diǎn)的代碼行左側(cè)的紅色圓點(diǎn)。
(2)在設(shè)置了斷點(diǎn)的代碼行左側(cè)的紅色圓點(diǎn)上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“刪除斷點(diǎn)”命令,如圖11.7所示。
圖11.7 右鍵快捷菜單刪除斷點(diǎn)
(3)在設(shè)置了斷點(diǎn)的代碼行上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“斷點(diǎn)”/“刪除斷點(diǎn)”命令
2.開(kāi)始執(zhí)行
開(kāi)始執(zhí)行是最基本的調(diào)試功能之一,從“調(diào)試”菜單(如圖11.8所示)中選擇“開(kāi)始調(diào)試”菜單,或在源代碼窗口中右鍵單擊可執(zhí)行代碼中的某行,從彈出的快捷菜單中選擇“運(yùn)行到光標(biāo)處”菜單,如圖11.9所示。
圖11.8 選擇“啟動(dòng)調(diào)試”菜單
圖11.9 選擇“運(yùn)行到光標(biāo)處”菜單
除了使用上述的方法開(kāi)始執(zhí)行外,還可以直接單擊工具欄中的按鈕,啟動(dòng)調(diào)試,如圖11.10所示。
圖11.10 工具欄中的啟動(dòng)調(diào)試按鈕
如果選擇“啟動(dòng)調(diào)試”菜單,則應(yīng)用程序啟動(dòng)并一直運(yùn)行到斷點(diǎn),此時(shí)斷點(diǎn)處的代碼以黃色底色顯示,如圖11.11所示。可以在任何時(shí)刻中斷執(zhí)行,以查看值(將鼠標(biāo)移動(dòng)到相應(yīng)的變量或者對(duì)象上,即可查看其具體值,如圖11.12所示)、修改變量或觀察程序狀態(tài)。
圖11.11 運(yùn)行到斷點(diǎn)
圖11.12 查看變量的值
如果選擇“運(yùn)行到光標(biāo)處”命令,則應(yīng)用程序啟動(dòng)并一直運(yùn)行到斷點(diǎn)或光標(biāo)位置,具體要看是斷點(diǎn)在前還是光標(biāo)在前,可以在源代碼窗口中設(shè)置光標(biāo)位置。如果光標(biāo)在斷點(diǎn)的前面,則代碼首先運(yùn)行到光標(biāo)處,如圖11.13所示。
圖11.13 運(yùn)行到光標(biāo)處
3.中斷執(zhí)行
當(dāng)執(zhí)行到達(dá)一個(gè)斷點(diǎn)或發(fā)生異常時(shí),調(diào)試器將中斷程序的執(zhí)行。選擇“調(diào)試”→“全部中斷”菜單后,調(diào)試器將停止所有在調(diào)試器下運(yùn)行的程序的執(zhí)行。程序并沒(méi)有退出,可以隨時(shí)恢復(fù)執(zhí)行,此時(shí)應(yīng)用程序處于中斷模式?!罢{(diào)試”菜單中“全部中斷”菜單如圖11.14所示。
圖11.14 “調(diào)試”→“全部中斷”菜單
除了通過(guò)選擇“調(diào)試”→“全部中斷”命令中斷執(zhí)行外,也可以單擊工具欄中的按鈕中斷執(zhí)行,如圖11.15所示。
圖11.15 工具欄中的中斷執(zhí)行按鈕
4.停止執(zhí)行
停止執(zhí)行意味著終止正在調(diào)試的進(jìn)程并結(jié)束調(diào)試會(huì)話,可以通過(guò)選擇菜單中的“調(diào)試”→“停止調(diào)試”命令來(lái)結(jié)束運(yùn)行和調(diào)試。也可以選擇工具欄中的按鈕停止執(zhí)行。
5.單步執(zhí)行和逐過(guò)程執(zhí)行
通過(guò)單步執(zhí)行,調(diào)試器每次只執(zhí)行一行代碼,單步執(zhí)行主要是通過(guò)逐語(yǔ)句、逐過(guò)程和跳出這3種命令實(shí)現(xiàn)的?!爸鹫Z(yǔ)句”和“逐過(guò)程”的主要區(qū)別是當(dāng)某一行包含函數(shù)調(diào)用時(shí),“逐語(yǔ)句”僅執(zhí)行調(diào)用本身,然后在函數(shù)內(nèi)的第一個(gè)代碼行處停止。而“逐過(guò)程”執(zhí)行整個(gè)函數(shù),之后在函數(shù)外的第一行代碼處停止。如果位于函數(shù)調(diào)用的內(nèi)部并想返回到調(diào)用函數(shù)時(shí),應(yīng)使用“跳出”,“跳出”將一直執(zhí)行代碼,直到函數(shù)返回,然后在調(diào)用函數(shù)中的返回點(diǎn)處中斷。
當(dāng)啟動(dòng)調(diào)試后,可以單擊工具欄中的按鈕執(zhí)行“逐語(yǔ)句”操作,單擊按鈕執(zhí)行“逐過(guò)程”操作,單擊按鈕執(zhí)行“跳出”操作,如圖11.16所示。
圖11.16 單步執(zhí)行的3種命令
說(shuō)明:除了在工具欄中單擊這3個(gè)按鈕外,還可以通過(guò)快捷鍵執(zhí)行這3種操作,啟動(dòng)調(diào)試后,按下<F11>鍵執(zhí)行“逐語(yǔ)句”操作、<F10>鍵執(zhí)行“逐過(guò)程”操作、<Shift+F10>鍵執(zhí)行“跳出”操作。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- VSCode調(diào)試C#程序及附缺失.dll文件的解決辦法
- C#客戶端程序Visual Studio遠(yuǎn)程調(diào)試的方法詳解
- C#動(dòng)態(tài)加載組件后如何在開(kāi)發(fā)環(huán)境中調(diào)試詳解
- C# Web應(yīng)用調(diào)試開(kāi)啟外部訪問(wèn)步驟解析
- C#使用Windows Service的簡(jiǎn)單教程(創(chuàng)建、安裝、卸載、調(diào)試)
- C#中一些你可能沒(méi)用過(guò)的調(diào)試窗口的方法
- C# 動(dòng)態(tài)編譯、動(dòng)態(tài)執(zhí)行、動(dòng)態(tài)調(diào)試
- c# 代碼調(diào)試技巧和如何遠(yuǎn)程調(diào)試
相關(guān)文章
基于WebRequest.RegisterPrefix的使用詳解
本篇文章對(duì)WebRequest.RegisterPrefix的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05解決C#獲取鼠標(biāo)相對(duì)當(dāng)前窗口坐標(biāo)的實(shí)現(xiàn)方法
本篇文章是對(duì)在C#中獲取鼠標(biāo)相對(duì)當(dāng)前窗口坐標(biāo)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C#匿名方法與Delegate類型轉(zhuǎn)換錯(cuò)誤分析
這篇文章主要介紹了C#匿名方法與Delegate類型轉(zhuǎn)換錯(cuò)誤,較為詳細(xì)的分析了C#匿名方法的用法及Delegate類型轉(zhuǎn)換錯(cuò)誤問(wèn)題解決方法,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-11-11C#實(shí)現(xiàn)TFTP客戶端的項(xiàng)目實(shí)踐
TFTP不僅有斷點(diǎn)續(xù)傳,多用戶級(jí)別限制等功能,本文主要介紹了C#實(shí)現(xiàn)TFTP客戶端的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04C#判斷語(yǔ)句的表達(dá)式樹(shù)實(shí)現(xiàn)
這篇文章介紹了C#判斷語(yǔ)句的表達(dá)式樹(shù)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01C# SqlHelper應(yīng)用開(kāi)發(fā)學(xué)習(xí)
這篇文章主要和大家一起學(xué)習(xí)C# SqlHelper應(yīng)用開(kāi)發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01