在Visual Studio Code中调试Go应用出现Rosetta错误如何解决
问题排查与解决方案
一、现有操作的问题点
- launch.json配置缺失编译标签:你正常启动服务时加了
-tags=jsoniter参数,但调试配置里没有对应配置,会导致调试启动时的编译产物和你正常运行的不一致,这是第一个明显的配置遗漏。 - 未确认VSCode与调试工具链的架构一致性:哪怕你安装的Go是arm64版本,只要VSCode本身或者调试工具delve是x86架构,运行在Rosetta转译模式下,就会触发这个报错。
二、分步修复步骤
- 确认VSCode架构
打开VSCode顶部菜单栏「关于Visual Studio Code」,查看版本说明:如果标注为「Intel」,说明你装的是x86版本,卸载后重新下载Apple Silicon架构的安装包重装即可。 - 重装arm64版本的delve调试工具
打开未开启Rosetta的终端,执行以下命令重新安装delve:
安装完成后执行GOARCH=arm64 go install github.com/go-delve/delve/cmd/dlv@latestdlv version确认输出包含darwin/arm64即可。 - 修正launch.json配置
补充编译标签参数,删除无效的host、port配置,最终配置参考如下:{ "name": "Launch Package", "type": "go", "request": "launch", "mode": "debug", "program": "cmd/server/", "buildFlags": "-tags=jsoniter" } - 额外排查项
右键你常用的终端应用,点击「显示简介」,确认「使用Rosetta打开」选项没有勾选,否则所有终端执行的命令都会走转译,也会触发架构错误。
三、备选调试方案
如果IDE调试暂时无法修复,可以直接使用dlv命令行调试,操作步骤如下:
- 终端执行命令启动调试服务:
dlv debug --build-flags="-tags=jsoniter" cmd/server/main.go - 启动后输入
b 文件名:行号添加断点,输入c继续运行程序,之后用Postman调用API即可命中断点,常用命令包括n(单步跳过)、s(单步进入)、p 变量名(打印变量值),完全可以替代IDE调试的核心功能。
内容的提问来源于stack exchange,提问作者Duy Bui
相关产品推荐
相关产品推荐

