Arm64에서 디버깅

이 문서에서는 ARM 프로세서의 디버깅 Windows 10 대해 설명합니다. Arm의 Windows 10 대한 일반적인 내용은 Arm64의 데스크톱 Windows 10 참조하세요.

일반적으로 사용자 모드 앱을 디버깅하는 개발자는 대상 앱의 아키텍처와 일치하는 디버거 버전을 사용해야 합니다. WinDbg의 Arm64 버전을 사용하여 사용자 모드 Arm64 애플리케이션을 디버그하고 Arm 버전의 WinDbg를 사용하여 사용자 모드 ARM32 애플리케이션을 디버그합니다. WinDbg의 x86 버전을 사용하여 Arm64 프로세서에서 실행되는 사용자 모드 x86 애플리케이션을 디버그합니다.

WOW64 또는 CHPE와 같은 시스템 코드를 디버그해야 하는 드문 경우에서는 Arm64 버전의 WinDbg를 사용할 수 있습니다. 다른 컴퓨터에서 Arm64 커널을 디버깅하는 경우 해당 다른 컴퓨터의 아키텍처와 일치하는 WinDbg 버전을 사용합니다.

Windows용 Arm 디버깅 도구 가져오기

Windows SDK(버전 10.0.16299 이상)를 다운로드하여 Arm64용 디버깅 도구를 가져올 수 있습니다. 설치하는 동안 Windows용 디버깅 도구 상자를 선택합니다.

디버깅 도구는 키트 설치 디렉터리의 폴더에 있습니다 Debuggers . x86 도구는 아래에 Debuggers\x86있고 ARM32 도구는 아래에 Debuggers\Arm있으며 Arm64 도구는 아래에 Debuggers\Arm64있습니다.

Arm64 코드 디버깅

Arm64 코드를 디버그하려면 Arm64 WinDbg가 필요합니다. 디버깅 환경은 다음과 같은 차이점을 제외하고 x86 Windows에서 x86 WinDbg를 사용하여 x86 애플리케이션을 디버깅하는 것과 유사합니다.

  • x0~x28 및 fp, lr, sp 등 32개의 범용 레지스터가 있습니다.
  • 프로그램 카운터 레지스터, PC는 범용 레지스터가 아닙니다.
  • 모든 범용 레지스터 및 PC 레지스터의 너비는 64비트입니다.
  • 실행을 위한 최대 2개의 활성 데이터 중단점과 읽기/쓰기 메모리에 대한 두 개의 활성 데이터 중단점. 자세한 내용은 프로세서 중단점을 참조하세요.

x86 사용자 모드 코드 디버깅

드물게 Arm64 WinDbg를 사용하여 x86 사용자 모드 코드를 디버그해야 하는 경우 다음 WinDbg 명령을 사용하여 컨텍스트 간에 전환할 수 있습니다.

  • .effmach x86: 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 디버깅에 대한 자세한 내용은 원격 디버깅을 참조하세요.

참고 항목