Arm64 のデバッグ

この記事では、ARM プロセッサ上の Windows 10 のデバッグについて説明します。 Arm 上の Windows 10 に関する一般的な情報については、「Arm64 上の Windows 10 デスクトップ」を参照してください。

一般に、ユーザー モード アプリをデバッグする開発者は、ターゲット アプリのアーキテクチャに一致するバージョンのデバッガーを使用する必要があります。 Arm64 バージョンの WinDbg を使用してユーザー モードの Arm64 アプリケーションをデバッグし、Arm バージョンの WinDbg を使用してユーザー モード ARM32 アプリケーションをデバッグします。 x86 バージョンの WinDbg を使用して、Arm64 プロセッサで実行されているユーザー モードの x86 アプリケーションをデバッグします。

まれに、WOW64 や CHPE などのシステム コードをデバッグする必要があるときは、Arm64 バージョンの WinDbg を使用できます。 別のコンピューターから Arm64 カーネルをデバッグする場合は、そのコンピューターのアーキテクチャに一致するバージョンの WinDbg を使用します。

Arm の Windows 用デバッグ ツールの入手

Arm64 用のデバッグ ツールを入手するには、Windows SDK (バージョン 10.0.16299 以降) をダウンロードします。 インストール中に、[Debugging Tools for Windows] ボックスを選択します。

デバッグ ツールは、キットのインストール ディレクトリ内の Debuggers フォルダーにあります。 x86 ツールは Debuggers\x86 にあり、ARM32 ツールは Debuggers\Arm、Arm64 ツールは Debuggers\Arm64 にあります。

Arm64 コードのデバッグ

Arm64 コードをデバッグするには、Arm64 WinDbg が必要です。 デバッグ エクスペリエンスは、x86 Windows での x86 WinDbg による x86 アプリケーションのデバッグと同様ですが、次の違いがあります。

  • 32 個の汎用レジスタがあります (x0 ~ x28、fp、lr、sp)。
  • プログラム カウンター レジスタ、pc は汎用レジスタではありません。
  • すべての汎用レジスタと pc レジスタは、ビット幅が 64 ビットです。
  • 実行用にアクティブなデータ ブレークポイントが最大 2 つ、読み取り/書き込みメモリ用に 2 つのアクティブなデータ ブレークポイント。 詳細については、「プロセッサ ブレークポイント」を参照してください。

x86 ユーザー モード コードのデバッグ

まれに、Arm64 WinDbg を使用して x86 ユーザー モード コードをデバッグする必要がある場合は、次の WinDbg コマンドを使用してコンテキストを切り替えることができます。

  • .effmach x86: x86 コンテキストに切り替えて表示し、x86 WinDbg を使用した結果をシミュレートします。
  • .effmach arm64: Arm64 コンテキストに切り替えて表示します。
  • .effmach chpe: CHPE コンテキストに切り替えて表示します。

.effmach の詳細については、「.effmach (有効なマシン)」を参照してください。

使用している WinDbg のバージョンに関係なく、ユーザー モードで x86 アプリをデバッグするときは、以下の考慮事項に注意してください。

  • スレッドがアクティブにデバッグされていなくて (たとえば、シングル ステップ実行、ブレークポイントに到達)、例外を報告していなくて、システム コール内ではない場合、レジスタ コンテキストが最新の状態ではない可能性があります。
  • エミュレーターは内部的に、データの不整合、無効な命令、ページ内 I/O エラーの例外を生成し、生成したものを処理します。 WinDbg を使用している場合は、[デバッグ] / [イベント フィルター] でこれらの例外を [無視] として構成することを検討してください。 アクセスできます。
  • Arm64 WinDbg をユーザー モードで使用する場合、x86 および CHPE 関数の境界を越えたシングル ステップ実行はサポートされません。 これを回避するには、ターゲット コードにブレークポイントを設定します。

ARM64 と WOW64 の一般的な情報については、64 ビット Windows プログラミング ガイドの「32 ビット アプリケーションの実行」を参照してください。

WOW64 で実行されているアプリケーションのデバッグについては、「WOW64 のデバッグ」を参照してください。

Visual Studio でのデバッグ

Visual Studio での Arm のデバッグについては、「リモート デバッグ」をご覧ください。

参照