VS2010 調試技巧

       最近合做開發,代碼已經完成了,可是一調試,錯誤一大堆,因爲是合做開發,不肯定是哪層的錯誤,得一步步得走,非常費時費力,平時調試的技巧用的很少,如今集中調試,結果有些手忙腳亂,效率也很低,因此在網上找了一些技巧,整理了一下,分享給你們。它們都很簡單,卻能幫咱們節約大量的時間,但願對你們有幫助。程序員

  跳到當前光標處(Ctrl+F10)編輯器

  我常常看到人們爲了到達目標代碼位置,而在程序中早早設定了斷點,而後反覆地按F10/F11,一步步走到目標代碼處。當程序員的確須要仔細觀察每一步的狀態變化時, F10/F11是合理的選擇。然而多數狀況下,人們只想快速到達他們真正關心的代碼處,這時候F10/F11就不是最佳選擇了。工具

  這時,你應該利用「跳到當前光標處」這個功能。先把光標定位在要測的目標代碼行上,再同時按Ctrl和F10,被測程序將直接跳到該行停下。你不再用按許屢次F10/F11了。即便目標代碼位於獨立的類或方法中,你仍然能夠從當前正在檢查的地方跳過去。spa

  條件中斷.net

  另外一種常見的狀況是:開發人員設置斷點,運行程序,利用不一樣的輸入觸發斷點,而後在斷點處手工檢查是否知足某些特定的條件,從而決定是否繼續調查。若是當前場景不是他們想要的,按F5繼續運行程序,嘗試別的輸入,手動重複剛纔的過程。線程

  針對上述狀況,Visual Studio提供了一個方便得多的功能——「條件中斷」。只有當程序知足了開發人員預設的條件後,條件斷點纔會被觸發,調試器中斷。這將避免頻繁地手工檢查/恢復程序運行,大量減小調試過程當中的手工和煩瑣工做。調試

  如何設置條件斷點code

  設置條件斷點很是容易。在特定的行上,按F9設置斷點。blog

  而後右擊斷點–編輯窗口左側的紅點,在上下文菜單上選擇「Condition…」。遞歸

  這時彈出一個對話框供你設置激活該斷點所需的條件。好比:咱們但願只有當局部變量paginatedDinners的尺寸小於10時,調試才中斷。咱們能夠寫出以下的表達式:

  如今我再運行這個程序,實現搜索,只有返回值小於10時,程序運行纔會被中斷。對於大於10的值,該斷點將被跳過。

  記錄到達斷點次數

  有時你但願,只有當第N次知足條件的運行到達斷點時,才中斷程序運行。例如:當第五次返回少於10份晚餐的查詢結果時,中斷程序運行。
  能夠經過右擊斷點,而後在彈出菜單上選擇「Hit count…」菜單命令實現。

  這時系統彈出一個對話框,它容許你指定:(1)當知足條件,並且進入斷點的累計次數等於N時,斷點命中一次。(2)當知足條件,並且進入斷點的累計次數是N的倍數時,斷點命中一次。(3)當知足條件,並且進入斷點的累計次數大於N時,每次命中斷點。

  機器/線程/進程過濾

  設置以下:右擊斷點;在彈出菜單上選擇「Filter…」菜單命令;而後指定命中斷點的特定條件:在指定的機器上、或指定的進程中、或指定的線程中。

  跟蹤點—進入斷點時的自定義操做

  許多人不知道「跟蹤點(TrackPoints)」這個調試功能。「跟蹤點「是種特殊的斷點,當它被命中時,它會觸發一系列自定義操做。若是你想觀察程序的行爲,而又不想中斷調試的時候,這個功能尤爲有用。

  我將用一個簡單的控制檯程序來演示如何使用「跟蹤點」。以下是斐波那契數列的一個遞歸實現:

  以上程序中,咱們使用Console.WriteLine() 輸出針對特定輸入值生成的最終斐波那契數列。若是但願在調試器裏觀察操做中每一次遞歸運算後的數列而又不實際中斷程序運行,該怎麼辦呢?「跟蹤點」能夠輕鬆實現。

  設置跟蹤點

  你能夠在特定的行上,按F9加跟蹤點。而後
  右擊斷點,在上下文菜單中選擇「When Hit…」:

  在彈出對話框上,你能夠設置命中該斷點時,所觸發的事件。

  在上面例子中,咱們設定一旦命中斷點時就打印追蹤信息。注意,咱們已經把局部變量「x」的值,做爲追蹤信息的一部分輸出。局部變量能夠經過{變量名}語法輸出。你還能夠利用系統內置的命令($CALLER, $CALLSTACK, $FUNCTION等等),在追蹤信息中輸出經常使用的調試值。

  在上例中,咱們同時選中了底端的「continue execution「選項,這說明咱們不但願程序中斷調試狀態,而是繼續運行。惟一的不一樣是:每次斷點條件知足時,咱們的自定義追蹤信息都將被輸出。

  如今當咱們運行程序時,會發現自定義追蹤信息自動顯示在Visual Studio的「輸出「窗口裏。這讓咱們很容易看到程序的遞歸調用過程:

  你也能夠選擇往應用程序中添加一個自定義追蹤信息的監聽器。這時追蹤點的輸出信息將經過它輸出,而不是Visual Studio的「輸出「窗口。

  跟蹤點—運行自定義的宏

  上週,我在倫敦演講時,有聽衆問道:當命中跟蹤點時,可否自動輸出全部的局部變量?

  Visual Studio中並無這樣的內置功能,但咱們能夠寫一個自定義宏來實現,而後在命中跟蹤點時調用該宏。這個的實現須要先打開Visual Studio的宏編輯器(工具->宏->宏IDE菜單命令),而後在項目資源管理器的MyMacros節點下選擇一個模塊或建立新模塊(如:加個名爲「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」宏了:

  上述代碼中,咱們用F9在「Add」方法的返回值處加了個斷點,而後右擊斷點,在彈出菜單上選擇「When hit」。

  將顯示以下對話框。和以前不同, 咱們不選「Print a message」選項,也不手工設定須要輸出的變量;而是選擇「Run a marco」複選框,並指定到咱們上面建立的UsefulThings.DumpLocals宏上:

  爲了使程序能在命中跟蹤點後仍繼續運行,咱們將繼續選中「continue execution」複選框。

  運行程序

  如今按F5運行程序,當「Add」方法被調用時,咱們會在Visual Studio的「輸出」窗口中看到以下結果。注意命中跟蹤點時,宏會自動列出每一個局部變量的名稱和值:

或者在代碼中寫有Debug.Print() 語句來輸出想查看的數據,在vs調試狀態下咱們能夠再vs的OutPut窗口看見,同上圖。

  利用數據提示功能(DataTips)

當程序執行到某一個位置,把鼠標放到變量上,會自動顯示值。

  利用可視化調試窗體(DebuggerVisualizers)

舉一個DataTable的DebuggerVisualizers的例子:

直接點擊放大鏡的圖標,或者下拉列表中選擇DataTable Visualizer,便可打開可視化的界面:以下圖

固然若是是DateSet,可視化工具窗口的表能夠選擇DataSet所包含的全部表的信息。

 

轉載的朋友請標明出處:http://blog.csdn.net/xiaoxian8023/article/details/7217549

相關文章
相關標籤/搜索