Arm64 上的偵錯

本文說明 ARM 處理器上的偵錯 Windows 10。 如需 Arm 上 Windows 10 的一般資訊,請參閱在 Arm64 上 Windows 10 桌面

一般而言,開發人員偵錯使用者模式應用程式應該使用符合目標應用程式架構的調試程式版本。 使用 Arm64 版本的 WinDbg 來偵錯使用者模式 Arm64 應用程式,並使用 Arm 版本的 WinDbg 來偵錯使用者模式 ARM32 應用程式。 使用 x86 版本的 WinDbg 來偵錯在 Arm64 處理器上執行的使用者模式 x86 應用程式。

在少數情況下,您需要對系統程式代碼進行偵錯,例如 WOW64 或 CHPE,您可以使用 WinDbg 的 Arm64 版本。 如果您要從另一部計算機偵錯 Arm64 核心,請使用符合其他電腦架構的 WinDbg 版本。

取得適用於 Windows 的 Arm 偵錯工具

您可以下載 Windows SDK (10.0.16299 版或更新版本,以取得 Arm64 的偵錯工具) 。 在安裝期間,選取 [ 適用於 Windows 的偵錯工具 ] 方塊。

偵錯工具位於 Debuggers 套件安裝目錄中的資料夾。 x86 工具位於 底下 Debuggers\x86、ARM32 工具位於 底下 Debuggers\Arm,而 Arm64 工具位於 之下 Debuggers\Arm64

偵錯 Arm64 程式代碼

需要 Arm64 WinDbg 才能偵錯 Arm64 程式代碼。 偵錯體驗類似於在 x86 Windows 上使用 x86 WinDbg 對 x86 應用程式進行偵錯,但下列差異除外。

  • 有 32 個一般用途緩存器 - x0 到 x28 和 fp、lr、sp。
  • 程式計數器緩存器電腦不是一般用途快取器。
  • 所有一般用途緩存器和計算機緩存器寬度都是64位。
  • 執行最多兩個作用中數據斷點,以及讀取/寫入記憶體的兩個作用中數據斷點。 如需詳細資訊,請參閱 處理器斷點

偵錯 x86 使用者模式程序代碼

在少數情況下,您需要使用 Arm64 WinDbg 對 x86 使用者模式程式代碼進行偵錯,您可以使用下列 WinDbg 命令在內容之間切換:

  • .effmach x86:切換至並查看 x86 內容,模擬使用 x86 WinDbg 的效果。
  • .effmach arm64:切換至並查看Arm64內容
  • .effmach chpe:切換至 並查看 CHPE 內容。

如需 .effmach 的詳細資訊,請參閱 .effmach (Effective Machine)

在使用者模式中偵錯 x86 應用程式時,不論您使用哪一個 WinDbg 版本,請注意這些考慮。

  • 例如,如果線程未主動進行偵錯, (例如,單一階、遇到斷點) 、未報告例外狀況,而不是在系統呼叫中,則登錄內容可能不是最新的。
  • 模擬器會在內部產生數據不對齊、不合法的指令、頁面 I/O 錯誤例外狀況,並處理它所產生的錯誤。 當您使用 WinDbg 時,請考慮將這些例外狀況設定為 [偵錯/事件篩選條件] 底下的 [忽略 ] 功能表項目。
  • 如果在使用者模式中使用Arm64 WinDbg,則不支援跨 x86 & CHPE 函式界限進行單一逐步執行。 若要解決此問題,請在目標程式代碼上設定斷點。

如需 ARM64 和 WOW64 的一般資訊,請參閱 64 位 Windows 程式設計指南中的 執行 32 位應用程式

如需在 WOW64 下執行之應用程式的偵錯資訊,請參閱 偵錯 WOW64

Visual Studio 偵錯

如需在Visual Studio中偵錯Arm的詳細資訊,請參閱 遠端偵錯

另請參閱