2008-09-25 24 views
33

儘管我一般不喜歡SO上的討論/主觀帖子,但我真的很欣賞人們放在一起的「隱藏的祕密」系列帖子。它們提供了您現在可能發現的一些常見工具的概述。Visual Studio .NET調試器的「隱藏的祕密」?

對於這個問題,我想探索Visual Studio .NET調試器。什麼是VS.NET調試器中的一些「隱藏的祕密」,您經常使用或最近發現並希望您早就知道?

回答

9

$exception將在監視窗口中顯示當前正在處理的異常,即使您沒有將Exception實例分配給指定變量的捕獲。

+8

無需將其放入手錶中,它會自動顯示爲本地窗口中的第一項。 – 2009-10-15 19:41:01

4

一些有用的快捷鍵。

  • F11步入方法。
  • Shift-F11步出一個方法。
  • F10跨越一個方法。
11

作爲一名Web服務開發人員,他在大多數時間都使用與我的前端代碼相同的解決方案工作,我發現能夠將"attach" to a process作爲一個巨大的時間保護程序。

在我發現這個隱藏的gem之前,我總是需要在一些調用web服務方法的前端代碼上設置一個斷點並進入它。現在我知道了這個技巧/功能,我可以在我的代碼的任何部分輕鬆設置斷點,從而節省了我大量的時間和精力。

+1

對於桌面應用程序,我發現它非常有用,可以將消息框或線程休眠放入不能斷點的區域,然後附加到那裏的進程。 – 2008-09-25 14:46:02

+3

@ j0rd4n:如果你可以添加一個MessageBox,這意味着你可以添加代碼,這意味着你也可以使用`Debugger.Break()`以編程方式設置一個斷點。 – Abel 2010-08-03 22:13:51

5

這是一種舊的。如果添加監視表達式err,hr,那麼這將保存GetLastError()的結果,格式爲HRESULT(僅限VC++調試器)。

22

我最喜歡的功能之一是"When Hit..."選項在斷點上可用。您可以打印一個消息具有可變的,有很多的其他信息,如沿着價值:

  • $ADDRESS - 當前指令
  • $CALLER - 以前的功能名稱
  • $CALLSTACK - 調用堆棧
  • $FUNCTION - 當前函數名稱
  • $PID - 進程ID
  • $PNAME - 進程名稱
  • $TID - 線程ID
  • $TNAME - 線程名稱

你也可以有它運行宏,但我從來沒有使用該功能。

7

您可以將windbg擴展加載到Visual Studio調試器中,並在即時窗口中使用它們。

18

對於.net應用程序System.Diagnostics有很多有用的調試工具。該Debugger類,例如:

Debugger.Break(); // Programmatically set a break point 
Debugger.Launch(); // Launch the debugger if not already attached 
Debugger.IsAttached // Check if the debugger is attached 

System.Diagnostics也有很多不錯的屬性。我已經使用了兩個用於改變細節調試器顯示屬性放入當地人窗口,並通過屬性跳過代碼的一步,你不關心調試:

// Displays the value of Property1 for any "MyClass" instance in the debugger 
[DebuggerDisplay("{Property1}")] 
public class MyClass { 
    public string Property1 { get; set; } 

    [DebuggerStepThrough] 
    public void DontStepInto() { 
     // An action we don't want to debug 
    } 
} 
9
  • 的線程窗口,從調試 - >視窗 - >線程。您可以凍結並解凍線程,並切換活動線程。在調試或複製多線程應用程序的問題時,這非常棒。
  • 您可以拖動&將黃色的「Next Statement」箭頭拖放到另一個地方。程序恢復時,將在該語句中恢復執行。您可以將它添加到工具欄,一個名爲Set Next Statement的藍色箭頭,但默認情況下不存在。
  • 您可以「撤消」您所做的導航,如滾動,轉到其他文件或跳轉到參考。快捷方式是ctrl--(控制減號)。這樣,你可以跳進一個函數,在那裏檢查代碼,然後返回到你沒看的地方。
+1

到點#2,您還可以右鍵單擊一行代碼並選擇「設置下一個語句」,它會將執行點移動到該行。 – CodingWithSpike 2009-06-19 12:30:03

18

您可以在「監視」窗口中右鍵單擊一個對象,然後單擊「創建對象ID」。

它將爲該實例分配一個ID號,允許您在複雜的對象圖中看到哪些對象引用同一實例。

4

事情我經常使用:

  • 單擊菜單項「調試|例外」(或Ctrl-d,E的簡稱),你可以啓用打破在任何異常被拋出的時候,或者選擇不打破某些例外。

  • 您可以設置調試器從MS服務器下載一些框架源代碼和符號,並進入框架代碼。 (一些庫,如System.ServiceModel,尚不可用)。它在調試下的選項窗口中。見MSDN How-To

  • 您可以使用VS.NET調試器來調試運行在IE中的Javascript。您只需安裝IE javascript調試器,並在IE設置中啓用javascript調試。然後在JS錯誤中會彈出一個「你想調試」對話框,你可以選擇在VS.NET中進行調試。

5

當執行暫停時,您可以上下拖動當前行光標(黃色箭頭)。

此外,爲了在異常暫停期間啓用此功能,您必須首先單擊「啓用編輯」功能以啓用異常詳細信息。

您也可以VS突破上處理的異常通過檢查一個感興趣的下: 調試 - >例外:拋出該異常列

1

您可以打開並放置一個斷點在源文件,如果文件屬於另一種解決方案(外部文件)。調試器仍然可以達到斷點。無需打開另一個Visual Studio實例來調試外部文件。有助於調試您收到的Web服務。只要所有的資源都是最新的和編譯的,這就可以工作。