在 Visual Studio 偵錯工具 (C#、C++、Visual Basic、F#) 中檢視反組譯程式碼

[反組譯碼] 視窗會顯示對應到編譯器所建立之指令的組譯程式碼。 如果您正在偵錯 Managed 程式碼,這些組譯碼 (Assembly) 指令相當於 Just-in-Time (JIT) 編譯器所產生的機器碼,而非 Visual Studio 編譯器所產生的 Microsoft Intermediate Language (MSIL)。

注意

若要充分利用 [反組譯碼] 視窗,請瞭解或了解組合語言程式設計的基本概念。 Intel 指令集的參考資料位於架構手冊的第 2 冊中。 此資料通常也適用於 AMD 指令集。

只有在啟用位址層級偵錯時,才能使用此功能。 這不能用於指令碼或 SQL 偵錯。

除了反組譯碼指令外,[反組譯碼] 視窗也可以顯示下列選擇性資訊:

  • 每一指令所在的記憶體位址。 對於原生應用程式,這是實際記憶體位址。 對於 Visual Basic 或 C#,這是函式開頭的位移。

  • 從組譯程式碼衍生的來源原始程式碼。

  • 程式碼位元組,也就是實際電腦或 MSIL 指令的代表位元組。

  • 記憶體位址的符號名稱。

  • 原始程式碼的對應行號。

組合語言指令包含了助憶鍵 (Mnemonics) (也就是指令名稱的縮寫),以及變數、暫存器和常數的符號。 每個機器語言指令都會以一個組合語言助憶鍵表示,後面選擇性跟著一個或多個服務。

組譯程式碼重度依賴處理器暫存器,或受控程式碼重度依賴 Common Language Runtime 暫存器。 您可以使用 [反組譯碼] 視窗及 [暫存器] 視窗,後者可讓您檢查暫存器內容。

若要以原始數值形式檢視機器碼指令,而不是以組合語言的形式,請使用記憶體視窗,或從反組譯碼視窗中的捷徑功能表選取程式碼位元組

使用反組譯碼視窗

若要啟用 [反組譯碼] 視窗,請在 [工具]>[選項]>[偵錯] 之下,選取 [啟用位址層級偵錯]

若要在偵錯期間開啟 [反組譯碼] 視窗,請選取 [Windows]>[反組譯碼],或按 Alt+8

注意

您看到的對話方塊與功能表命令,可能會因您所使用的設定或版本,而與說明中所述不同。 若要變更您的設定,請在 [工具] 功能表上選擇 [匯入和匯出設定]。 如需詳細資訊,請參閱重設所有設定

若要開啟或關閉選用資料,以在 [反組譯碼] 視窗上按一下滑鼠右鍵,然後在捷徑功能表中設定或清除所需的選項。

左邊界中的黃色箭頭會標示出目前的執行點。 若為機器碼,執行點會對應至 CPU 的程式計數器。 這個位置顯示出下一個要執行的程式指令。

在記憶體中向上或向下翻頁

當您在 [記憶體] 視窗或 [反組譯碼] 視窗中檢視記憶體內容時,可以使用垂直捲軸在記憶體空間中上下移動。

  1. 若要向下翻頁 (移至較高的記憶體位址),請按一下捲動方塊下方的垂直捲軸。

  2. 若要向上翻頁 (移至較低的記憶體位址),請按一下拇指上方的垂直捲軸。

    您也會發現垂直捲軸的操作方式沒有一定的標準。 現代電腦的位址空間很大,如果您抓取捲軸拇指並將它拖曳到隨機位置,很容易會遺失。 因此,拇指是「彈性載入」而且一定在捲軸的中央。 在機器碼應用程式中,您可以向上或向下翻頁,但不能自由捲動。

    在 Managed 應用程式中時,反組譯碼只有一個函式,您可以正常捲動。

    您會發現較高的位址出現在視窗底端。 若要檢視較高的位址,就必須向下而非向上移動。

向上或向下移動一個指令

  • 請按一下垂直捲軸頂端或底端的箭頭。