Отладка в Arm64
В этой статье описывается отладка Windows 10 на процессорах ARM. Общие сведения о Windows 10 в Arm см. в статье Windows 10 desktop on Arm64.
Как правило, разработчики, отлаживающие приложения в пользовательском режиме, должны использовать версию отладчика, соответствующую архитектуре целевого приложения. Используйте версию WinDbg для Arm64 для отладки приложений Arm64 в пользовательском режиме и версию WinDbg для отладки приложений ARM32 в пользовательском режиме. Используйте версию WinDbg x86 для отладки приложений x86 в пользовательском режиме, работающих на процессорах Arm64.
В редких случаях, когда требуется выполнить отладку системного кода, например WOW64 или CHPE, можно использовать версию WinDbg для Arm64. При отладке ядра Arm64 с другого компьютера используйте версию WinDbg, соответствующую архитектуре этого другого компьютера.
Получение средств отладки Arm для Windows
Средства отладки для Arm64 можно получить, скачав пакет Windows SDK (версии 10.0.16299 или более поздней). Во время установки выберите поле Средства отладки для Windows .
Средства отладки находятся в папке Debuggers
в каталоге установки комплекта. Средства x86 находятся в разделе Debuggers\x86
, средства ARM32 — в Debuggers\Arm
, а средства Arm64 — в Debuggers\Arm64
.
Отладка кода Arm64
Для отладки кода Arm64 требуется WinDbg arm64. Процесс отладки аналогичен отладке приложений x86 с помощью x86 WinDbg в x86 Windows, за исключением следующих различий.
- Существует 32 регистра общего назначения — от x0 до x28 и fp, lr, sp.
- Регистр счетчика программы, pc, не является регистром общего назначения.
- Все регистры общего назначения и регистры пк имеют 64-разрядную ширину.
- Не более двух активных точек останова данных для выполнения и двух активных точек останова данных для операций чтения и записи. Дополнительные сведения см. в разделе Точки останова процессора.
Отладка кода пользовательского режима x86
В редких случаях, когда требуется использовать Arm64 WinDbg для отладки кода пользовательского режима x86, для переключения между контекстами можно использовать следующие команды WinDbg:
- .effmach x86: переключитесь на контекст x86 и просмотрите его, имитируя эффект использования x86 WinDbg.
- .effmach arm64: переключение на контекст Arm64 и просмотр контекста Arm64
- .effmach chpe: переключитесь на контекст CHPE и просмотрите его.
Дополнительные сведения о EFFMACH см. в разделе .effmach (эффективный компьютер).
При отладке приложений x86 в пользовательском режиме, независимо от используемой версии WinDbg, учитывайте эти рекомендации.
- Если поток не выполняется активной отладки (например, одношаговая, обнаружена точка останова), не сообщается об исключении и не выполняется системный вызов, контекст регистра может быть неактуален.
- Эмулятор внутренне создает исключения ошибок неправильного настройки данных, недопустимая инструкция, исключения ошибок ввода-вывода на странице и обрабатывает те, которые он создает. При использовании WinDbg рекомендуется настроить эти исключения как игнорируемые в фильтрах отладки и событий... .
- При использовании Arm64 WinDbg в пользовательском режиме одношаговая привязка между 86-разрядными & границами функций CHPE не поддерживается. Чтобы обойти эту проблему, установите точки останова в целевом коде.
Общие сведения об ARM64 и WOW64 см. в статье Запуск 32-разрядных приложений руководства по программированию для 64-разрядной версии Windows.
Сведения об отладке приложений, работающих под управлением WOW64, см. в разделе Отладка WOW64.
Отладка в Visual Studio
Сведения об отладке Arm в Visual Studio см. в разделе Удаленная отладка.