Visual Studio的调试技巧
Visual Studio的調(diào)試技巧【原文地址】?Debugging Tips with Visual Studio 2010 【原文發(fā)表日期】 2010/8/19 10:48 AM ? 這是我寫的關于VS2010和.Net4發(fā)布的博客系列的第26篇。 今天的博文包含了一些有用的能用于VS的調(diào)試技巧。 我的朋友?Scott Cate(他寫了很多很好的關于VS使用技巧和竅門的?博客)最近向我強調(diào)了這些很好的技巧,大部分使用VS的開發(fā)人員好像不知道這些技巧(即使他們大部分都在產(chǎn)品開發(fā)組呆過一陣子)。 如果你還沒有使用過這些技巧,希望這篇博文能幫你發(fā)現(xiàn)它們。 它們學起來很容易,能幫你節(jié)省很多時間。 運行到光標(Ctrl+ F10) 我經(jīng)常看見人們是這樣來調(diào)試應用程序的: 他們在應用程序需要調(diào)試的代碼前設置一個斷點,然后反復的敲F10/F11來逐步通過代碼,直到到達他們真正想要研究的確切位置。有些時候他們需要仔細觀察所跨過的每行代碼,這樣使用F10/F11 就很合理。 但是更普遍的是,他們只想快點進入他們真正關心的那行代碼——這是使用F10/F11 就不是最好的選擇了。 相反, 你可能想利用調(diào)試器支持的特性“運行到光標”。 只需簡單地把你的光標放在代碼中你想程序運行到的那一行,然后同時敲Ctrl+F10。這樣程序就會運行到光標所在的那一行, 然后執(zhí)行中止,由調(diào)試器控制——這樣就節(jié)約了你反復敲擊F10/F11到達那里的時間。即使你想運行到的那行代碼不在當前調(diào)試的方法或類里,而是在一個獨立的方法或類里,這也同樣奏效。 條件斷點 我們經(jīng)常在可用性學習中見到另一個普遍的技巧:開發(fā)人員設置斷點,運行程序,試著輸入一些數(shù)據(jù),當?shù)竭_一個斷點時,手工檢查某種條件是不是成立,如果成立才決定進一步研究。 如果條件不符合他們想要的, 按F5繼續(xù)執(zhí)行程序,嘗試另外一些輸入,再手工重復同樣的過程。 VS的條件斷點功能提供了一個更加容易的方法來處理以上情況。 條件斷點允許你只在某種明確指定的條件成立時才中止執(zhí)行,由調(diào)試器控制。這幫你免于手動檢查/恢復你的程序, 使得整個調(diào)試過程免去許多手工活,也不那么冗長乏味。 設置一個條件斷點 設置一個條件斷點十分簡單,在代碼里按F9為某一行設置一個斷點: 然后右擊斷點——編輯器左邊的紅色圓圈,在右鍵菜單中,選擇“條件…” : 將彈出以下對話框, 允許你指明某種條件,只有當這種條件成立時,斷點才能達到。 例如:我們可以通過寫下面的表達式來指明,只有當paginatedDinners列表元素的個數(shù)小于10時,才中止程序,由調(diào)試器控制。 現(xiàn)在, 當我重新運行程序來研究一下, 調(diào)試器只在這個查找返回值小于10時,才中止程序執(zhí)行。 如果返回值不小于10 ,將不會觸發(fā)斷點。 命中次數(shù)功能 有時你只想在條件第N次成立時中止執(zhí)行。例如:僅當?shù)?次出現(xiàn)查找返回值小于10時,才中止執(zhí)行。你這樣啟用這個功能:右擊斷點, 選擇“命中次數(shù)…”菜單命令。 將彈出以下對話框, 允許你指明程序中斷的條件:條件被第N次滿足時,或者條件被滿足的次數(shù)是N的倍數(shù)時,或者條件被滿足的次數(shù)大于等于N次時。 機器/線程/進程篩選器 你可以右擊斷點,選擇“篩選器…”菜單命令, 來指明斷點只在某臺特定的機器,或某個特定的進程或線程中才能被觸發(fā)。 跟蹤點——當擊中斷點時自定義行為 很多人不知道的一個調(diào)試功能是使用?跟蹤點。 跟蹤點是一個斷點, 當它被擊中時,某種自定義的宏會被觸發(fā)執(zhí)行。當你想研究你的應用程序而又不想中止執(zhí)行程序時, 這個功能特別有用。 我將用一個簡單的控制臺程序來演示如何使用跟蹤點。 下面是?斐波那契數(shù)列的遞歸實現(xiàn): 在上面的應用程序中,針對特定的輸入,我們使用Console.WriteLine()來輸出最后的斐波那契數(shù)列。假如我們想在調(diào)試過程中研究斐波那契的遞歸過程——而不停止調(diào)試的執(zhí)行? 跟蹤點能幫我們很輕松地做到這一點。 設置跟蹤點 你可以這樣啟用跟蹤點:按F9在代碼上設置一個斷點, 右擊斷點,在右鍵菜單中選擇“命中條件…”菜單命令: 將彈出以下對話框——允許你指定當斷點觸發(fā)時,進行何種操作: 如上所示,我們指定每次當斷點的條件成立時,打印跟蹤信息。注意我們指定了想要輸出的局部變量“X” 的值作為輸出信息的一部分。 局部變量能通過{變量名}的語法被引用。 也有內(nèi)嵌的命令(像$CALLER,$CALLSTACK, $FUNCTION等等)可以用來輸出跟蹤信息中常見的值。 上面對話框的底部, 我們也選中了“繼續(xù)執(zhí)行”單選框——表示我們不希望調(diào)試器暫停程序。 相反,程序會繼續(xù)執(zhí)行——只是我們自定義的跟蹤信息會在每次斷點條件滿足時輸出,就這點不同。 現(xiàn)在當我們運行程序時,我們會發(fā)現(xiàn)自定義的跟蹤信息會自動出現(xiàn)在VS的輸出窗口中——使我們能看到程序的遞歸過程。 你也可以選擇為你的程序設置一個自定義跟蹤監(jiān)聽器——這樣跟蹤點的輸出信息就會被重定向到它里面,而不是VS的輸出窗口里。 跟蹤點——運行自定義的宏 上周我在倫敦做了一次演講, 聽眾中有個人問了這樣一個問題:有沒有可能當擊中一個跟蹤點時,自動輸出所有的局部變量。 這個功能不是內(nèi)置在VS中的, 但是可以通過在VS中寫一個自定義的宏來啟用它,然后設置一個跟蹤點,當它被擊中時,調(diào)用這個宏。 為了實現(xiàn)這個目的, 打開VS中的宏窗口(工具->宏->宏菜單命令)。然后在項目管理器“MyMacros”結(jié)點下面, 選擇模板或者新建一個模板(如:添加一個名為“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 上面的宏代碼依次檢測當前堆棧,獲取所有的局部變量,并將其顯示在輸出窗口。 使用DumpLocals自定義宏 在下面這個簡單的應用程序中,我們可以利用自定義的“DumpLocals”宏: 在上面的Add方法的return語句上,按F9設置一個斷點。 右擊斷點,選擇“命中條件…”菜單命令: 將彈出以下對話框,上例中,我們選中了“打印信息”的單選框,再手工指定希望輸出的變量, 而這里, 我們選中“運行宏”的單選框,使它指向我們創(chuàng)建的自定義宏UsefulThings.DumpLocals: 我們?nèi)匀贿x中“繼續(xù)執(zhí)行”單選框,這樣能保證當跟蹤點被擊中時,程序依然能夠繼續(xù)執(zhí)行。 運行程序 現(xiàn)在當我們按F5運行程序,當調(diào)用Add方法時,我們將看見以下輸出出現(xiàn)在VS輸出窗口中。 注意當跟蹤點被擊中時,宏是如何自動列出各個變量名及其值的。 總結(jié) VS調(diào)試器功能非常豐富。 我強烈建議大家抽出一些時間來學習它的所有功能。 以上的技巧和訣竅只是很多大家沒有真正意識到的功能中的一小部分。 我之前寫過其他一些?關于VS2010調(diào)試器改進的博客(包括數(shù)據(jù)標簽固定,斷點導入導出,保留最后值變量, 等等)。 我將發(fā)表更多關于VS2010的智能跟蹤和轉(zhuǎn)儲文件調(diào)試支持的博文。這些技術提供了很多非常酷的新功能,會讓程序(包括產(chǎn)品中的程序)的調(diào)試變得非常簡單和強大。 也請務必看看Scott Cate很棒的?VS2010技巧和訣竅系列,你可以學習如何更好的利用VS。他有一些非常棒的免費視頻和博客。 也要看看Jim Griesmer很棒的?VS調(diào)試技巧和訣竅系列。 他有許多很好的可以利用的技巧和訣竅。 希望這能對您有所幫助。 Scott |
轉(zhuǎn)載于:https://www.cnblogs.com/yymn/p/5341945.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Visual Studio的调试技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯QQ 实际登录的账号并非请求的账号
- 下一篇: AutoLayout源码解析(1)