一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

VS2010中的調(diào)試技巧

  這是我的博客中關(guān)于VS 2010和.NET 4發(fā)布系列的第二十六篇文章。

  今天的博文將介紹Visual Studio中的一些實(shí)用調(diào)試技巧。這是受我朋友Scott Cate (他發(fā)表過(guò)幾十篇很棒的VS技術(shù)文章) 啟發(fā)。他最近告訴我,許多Visual Studio下的程序員,甚至一些很有經(jīng)驗(yàn)的開(kāi)發(fā)人員,都不知道這些技巧。希望這篇文章能幫你掌握這些技巧。它們都很簡(jiǎn)單,卻能幫你節(jié)約大量的時(shí)間。

  跳到當(dāng)前光標(biāo)處(Ctrl+F10)

  我經(jīng)常看到人們?yōu)榱说竭_(dá)目標(biāo)代碼位置,而在程序中早早設(shè)定了斷點(diǎn),然后反復(fù)地按F10/F11,一步步走到目標(biāo)代碼處。當(dāng)程序員的確需要仔細(xì)觀察每一步的狀態(tài)變化時(shí), F10/F11是合理的選擇。然而多數(shù)情況下,人們只想快速到達(dá)他們真正關(guān)心的代碼處,這時(shí)候F10/F11就不是最佳選擇了。

  這時(shí),你應(yīng)該利用“跳到當(dāng)前光標(biāo)處”這個(gè)功能。先把光標(biāo)定位在要測(cè)的目標(biāo)代碼行上,再同時(shí)按Ctrl和F10,被測(cè)程序?qū)⒅苯犹皆撔型O隆D阍僖膊挥冒丛S多次F10/F11了。即使目標(biāo)代碼位于獨(dú)立的類(lèi)或方法中,你仍然可以從當(dāng)前正在檢查的地方跳過(guò)去。

  條件中斷

  另一種常見(jiàn)的情況是:開(kāi)發(fā)人員設(shè)置斷點(diǎn),運(yùn)行程序,利用不同的輸入觸發(fā)斷點(diǎn),然后在斷點(diǎn)處手工檢查是否滿(mǎn)足某些特定的條件,從而決定是否繼續(xù)調(diào)查。如果當(dāng)前場(chǎng)景不是他們想要的,按F5繼續(xù)運(yùn)行程序,嘗試別的輸入,手動(dòng)重復(fù)剛才的過(guò)程。

  針對(duì)上述情況,Visual Studio提供了一個(gè)方便得多的功能——“條件中斷”。只有當(dāng)程序滿(mǎn)足了開(kāi)發(fā)人員預(yù)設(shè)的條件后,條件斷點(diǎn)才會(huì)被觸發(fā),調(diào)試器中斷。這將避免頻繁地手工檢查/恢復(fù)程序運(yùn)行,大量減少調(diào)試過(guò)程中的手工和煩瑣工作。

  如何設(shè)置條件斷點(diǎn)

  設(shè)置條件斷點(diǎn)非常容易。在特定的行上,按F9設(shè)置斷點(diǎn)。

  然后右擊斷點(diǎn)–編輯窗口左側(cè)的紅點(diǎn),在上下文菜單上選擇“Condition…”。

  這時(shí)彈出一個(gè)對(duì)話(huà)框供你設(shè)置激活該斷點(diǎn)所需的條件。比如:我們希望只有當(dāng)局部變量paginatedDinners的尺寸小于10時(shí),調(diào)試才中斷。我們可以寫(xiě)出如下的表達(dá)式:

  現(xiàn)在我再運(yùn)行這個(gè)程序,實(shí)現(xiàn)搜索,只有返回值小于10時(shí),程序運(yùn)行才會(huì)被中斷。對(duì)于大于10的值,該斷點(diǎn)將被跳過(guò)。

  記錄到達(dá)斷點(diǎn)次數(shù)

  有時(shí)你希望,只有當(dāng)?shù)贜次滿(mǎn)足條件的運(yùn)行到達(dá)斷點(diǎn)時(shí),才中斷程序運(yùn)行。例如:當(dāng)?shù)谖宕畏祷厣儆?0份晚餐的查詢(xún)結(jié)果時(shí),中斷程序運(yùn)行。
  可以通過(guò)右擊斷點(diǎn),然后在彈出菜單上選擇“Hit count…”菜單命令實(shí)現(xiàn)。

  這時(shí)系統(tǒng)彈出一個(gè)對(duì)話(huà)框,它允許你指定:(1)當(dāng)滿(mǎn)足條件,而且進(jìn)入斷點(diǎn)的累計(jì)次數(shù)等于N時(shí),斷點(diǎn)命中一次。(2)當(dāng)滿(mǎn)足條件,而且進(jìn)入斷點(diǎn)的累計(jì)次數(shù)是N的倍數(shù)時(shí),斷點(diǎn)命中一次。(3)當(dāng)滿(mǎn)足條件,而且進(jìn)入斷點(diǎn)的累計(jì)次數(shù)大于N時(shí),每次命中斷點(diǎn)。

  機(jī)器/線程/進(jìn)程過(guò)濾

  設(shè)置如下:右擊斷點(diǎn);在彈出菜單上選擇“Filter…”菜單命令;然后指定命中斷點(diǎn)的特定條件:在指定的機(jī)器上、或指定的進(jìn)程中、或指定的線程中。

  跟蹤點(diǎn)—進(jìn)入斷點(diǎn)時(shí)的自定義操作

  許多人不知道“跟蹤點(diǎn)(TrackPoints)”這個(gè)調(diào)試功能。“跟蹤點(diǎn)“是種特殊的斷點(diǎn),當(dāng)它被命中時(shí),它會(huì)觸發(fā)一系列自定義操作。如果你想觀察程序的行為,而又不想中斷調(diào)試的時(shí)候,這個(gè)功能尤其有用。

  我將用一個(gè)簡(jiǎn)單的控制臺(tái)程序來(lái)演示如何使用“跟蹤點(diǎn)”。如下是斐波那契數(shù)列的一個(gè)遞歸實(shí)現(xiàn):

  以上程序中,我們使用Console.WriteLine() 輸出針對(duì)特定輸入值生成的最終斐波那契數(shù)列。如果希望在調(diào)試器里觀察操作中每一次遞歸運(yùn)算后的數(shù)列而又不實(shí)際中斷程序運(yùn)行,該怎么辦呢?“跟蹤點(diǎn)”可以輕松實(shí)現(xiàn)。

  設(shè)置跟蹤點(diǎn)

  你可以在特定的行上,按F9加跟蹤點(diǎn)。然后
  右擊斷點(diǎn),在上下文菜單中選擇“When Hit…”:

  在彈出對(duì)話(huà)框上,你可以設(shè)置命中該斷點(diǎn)時(shí),所觸發(fā)的事件。

  在上面例子中,我們?cè)O(shè)定一旦命中斷點(diǎn)時(shí)就打印追蹤信息。注意,我們已經(jīng)把局部變量“x”的值,作為追蹤信息的一部分輸出。局部變量可以通過(guò){變量名}語(yǔ)法輸出。你還可以利用系統(tǒng)內(nèi)置的命令($CALLER, $CALLSTACK, $FUNCTION等等),在追蹤信息中輸出常用的調(diào)試值。

  在上例中,我們同時(shí)選中了底端的“continue execution“選項(xiàng),這說(shuō)明我們不希望程序中斷調(diào)試狀態(tài),而是繼續(xù)運(yùn)行。唯一的不同是:每次斷點(diǎn)條件滿(mǎn)足時(shí),我們的自定義追蹤信息都將被輸出。

  現(xiàn)在當(dāng)我們運(yùn)行程序時(shí),會(huì)發(fā)現(xiàn)自定義追蹤信息自動(dòng)顯示在Visual Studio的“輸出“窗口里。這讓我們很容易看到程序的遞歸調(diào)用過(guò)程:

  你也可以選擇往應(yīng)用程序中添加一個(gè)自定義追蹤信息的監(jiān)聽(tīng)器。這時(shí)追蹤點(diǎn)的輸出信息將通過(guò)它輸出,而不是Visual Studio的“輸出“窗口。

  跟蹤點(diǎn)—運(yùn)行自定義的宏

  上周,我在倫敦演講時(shí),有聽(tīng)眾問(wèn)道:當(dāng)命中跟蹤點(diǎn)時(shí),能否自動(dòng)輸出所有的局部變量?

  Visual Studio中并沒(méi)有這樣的內(nèi)置功能,但我們可以寫(xiě)一個(gè)自定義宏來(lái)實(shí)現(xiàn),然后在命中跟蹤點(diǎn)時(shí)調(diào)用該宏。這個(gè)的實(shí)現(xiàn)需要先打開(kāi)Visual Studio的宏編輯器(工具->宏->宏IDE菜單命令),然后在項(xiàng)目資源管理器的MyMacros節(jié)點(diǎn)下選擇一個(gè)模塊或創(chuàng)建新模塊(如:加個(gè)名為“UsefulThings”的模塊),再把下面的VB宏代碼貼到模塊中并保存。

Sub DumpLocals()
Dim outputWindow As EnvDTE.OutputWindow
outputWindow
= DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object

Dim currentStackFrame As EnvDTE.StackFrame
currentStackFrame
= DTE.Debugger.CurrentStackFrame

outputWindow.ActivePane.OutputString(“
*Dumping Local Variables*+ vbCrLf)
For Each exp As EnvDTE.Expression In currentStackFrame.Locals
outputWindow.ActivePane.OutputString(exp.Name
+=+ exp.Value.ToString() + vbCrLf)
Next
End Sub

NET技術(shù)VS2010中的調(diào)試技巧,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久久精品麻豆 | 中文婷婷 | 91久久网 | 国产精品久久1024 | 五月天最新网址 | 2020国产精品自拍 | 色天天久久 | 美女搞黄网站 | 欧美黄色第一页 | 日本 ed2k| 日本免费新一区二区三区 | 亚洲国产一区二区三区在线观看 | 成 人免费va视频 | 精品资源在线 | 欧洲精品一区二区三区在线观看 | 欧洲精品码一区二区三区免费看 | 午夜91| 国产一区自拍视频 | 亚洲成人手机在线观看 | 国产青草 | 亚洲第一黄色 | 激情6月丁香婷婷色综合 | 久久国产免费一区二区三区 | 精品视频久久 | 国产精品免费久久久久影院小说 | 欧美日韩一二三区 | 国产成人综合网在线播放 | riav久久中文一区二区 | 精品久久久久久久久免费影院 | 韩国美女一区二区 | 九九午夜 | 在线免费看污视频 | 欧美videos极品另类 | 国产亚洲精aa在线观看香蕉 | 国产三级级在线观看大学生 | 中国一级特黄真人毛片免费看 | 国产精品久久久久桃色tv | 中文字幕久久久久久精 | 好吊在线视频 | 一级做a爰片久久毛片一 | 亚洲欧美另类图片 |