Arm64 でのデバッグ

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

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

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

Windows 用 Arm デバッグ ツールの取得

Arm64 用のデバッグ ツールを入手するには、 Windows SDK (バージョン 10.0.16299 以降) をダウンロードします。 インストール中に、[ 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 のデバッグについては、「 リモート デバッグ」を参照してください。

参照