You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2019远程调试Win ARM64 CMake项目触发Access violation报错

问题根因

该异常和代码逻辑完全无关,本质是Visual Studio 2019远程调试时架构识别错误,误用x64调试器解析ARM64目标程序,将ARM64机器码错误解码为x64指令,导致调试执行流、符号匹配完全错乱,最终触发访问违例。
核心佐证有两个:

  1. 编译出的可执行文件直接在ARM64目标设备上独立运行完全正常,可以正常输出Hello World,说明二进制编译、链接、部署流程没有问题。
  2. 你看到的反汇编结果完全不符合正常编译产物的特征:连续十几条无意义的add byte ptr [rax],al填充、大量?? ??????无法解码的指令、main函数入口处出现和C++代码完全不匹配的无效指令,都是指令集被错误解码的典型表现。
排查解决方法
  • 检查目标设备上的远程调试器版本:在ARM64设备上启动远程调试服务时,必须运行ARM64版本的msvsmon.exe,不能使用x64版本的远程调试器。x64调试器不具备ARM64指令解析能力,必然出现解码错乱。
  • 校验编译产物架构:在主机的CMake输出目录中找到生成的CMakeARM64.exe,查看PE文件头的机器类型字段,确认是ARM64(AA64)架构,而非AMD64架构。如果编译出的是x64程序,在ARM64设备上靠模拟层运行时也会导致调试器识别错误,这种情况要确认CMakeSettings.json里的inheritEnvironments字段确实为msvc_arm64_x64,没有错选x64编译环境。
  • 修正调试器类型配置:在VS的CMake调试启动配置中,不要手动将调试器类型固定为"原生(x64)",改为"自动"模式;如果自动识别仍然出错,手动强制指定调试器类型为"原生(ARM64)"。
  • 清理缓存全量重编:删除目标设备上C:\Windows Default Deploy Directory\ARM64\路径下的所有旧部署文件,同时删除主机上的CMake build输出目录,执行全量重新编译、部署,避免旧的错误架构文件残留干扰调试器识别。
  • 若以上操作后问题仍存在,将Visual Studio 2019更新到16.11最终服务版本即可,早期VS2019版本存在CMake ARM64远程调试的架构识别已知bug。

内容的提问来源于stack exchange,提问作者nightdev123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:12:21