无法在 Mac M1 上使用 VSCode 调试 Go 代码

22

我发现一个与我遇到同样问题的主题(Can't debug Golang in vscode apple m1),但我不确定它是不是旧的解决方案,因为我正在使用Go版本。

go1.17.1 darwin/arm64 

使用

dlv version 1.7.2 

并且

VSCode version 1.60.2 (arm64)

on

Mac M1 BigSur (11.6)

当我运行调试 (fn+f5) 时,会弹出一个调试控制台:
Starting: /Users/username/go/bin/dlv-dap dap --check-go-version=false --listen=127.0.0.1:53115 --log-dest=3 from /Users/username/go/src/project-name
DAP server listening at: 127.0.0.1:53115

同时弹出了一个错误提示框:

Failed to launch: could not launch process: can not run under Rosetta, check that the installed build of Go is right for your CPU architecture

我尝试将Go版本降级到1.16.8 arm64,并使用dlv 1.6.1,但仍然遇到相同的错误。

我可以在这两个版本上成功使用go build。

8个回答

34

以下是我如何解决这个问题的步骤。

  1. 卸载 Golang(AMD-64版本)。
  2. 安装Golang(ARM-64)。使用 go env GOARCH 确认。
  3. $GOPATH/bin 中删除(VS Code使用的工具)二进制文件(重要)。
  4. 重新启动VS-Code并安装所需的工具(如果未安装,VS Code将会发出警告并要求您安装它们)。

问题的根本原因:我意外地在我的 Apple Mac M1 上安装了 amd-64 版本而不是 arm-64 版本。

感谢 Painhardcore 的回答指引我正确方向。


1
安装的库对我来说已经足够了。我已经安装了正确的软件包一段时间,但早期可能安装了错误的Golang版本。我只需要清除旧的二进制文件并重新安装它们即可。 - Galen Howlett
那对我有用。谢谢! - Anh Nhat Tran
4
谢谢,那很有帮助!这里需要注意的是,在1.18版本中似乎不再使用$GOPATH/bin,而应该使用~/go/bin。请参见https://dev59.com/bVcP5IYBdhLWcg3wXI7Z#44506125 - Tobias Weichart
3
您也可以通过以下步骤重新安装 VS Code 使用的工具:
  1. 按下 F1 键
  2. 选择“Go: Install/Update Tools”
  3. 选择要重新安装的工具
- iamcmnut
@iamcmnut的评论非常有价值。 - Csene
显示剩余2条评论

28
  1. 确保你的VSCode使用arm64版本。(它可以使用与系统不同的go版本)

  2. 运行Go:安装/更新工具。它将使用arm64 go版本重新构建所有工具。


3
请问您能详细说明一下吗? "确保您的VSCode使用arm64版本" ... 怎样做呢? 回答:如何确保您的VSCode使用arm64版本? - Peter McIntyre
4
我观察到dlv-dap命令在vscode中的位置(问题中的“Starting: /Users/username/go/bin/dlv-dap ...”),然后使用“which go”验证这与我在PATH /命令行中配置的go是相同的(go环境变量GOPATH可能不同,据我所知,vscode基于它)。运行“go version”,我发现我正在使用darwin/amd64,而不是ARM。我从https://go.dev/dl/下载了正确的版本,并将其替换了掉(通过删除整个"go"目录并放置新的"go"目录来进行替换)。 - Gerardo Roza
谢谢!对我来说,Command-Shift-P >“Go:安装/更新工具”解决了问题!之前安装的是amd64而不是arm64版本,删除并安装正确版本的go还不够,因为工具仍然是针对英特尔处理器的! - Fernando Madruga

8

对我有用的方法:

  1. 检查你的Mac使用的芯片类型,在“关于本机”>“概述”>“芯片”中可以检查到。
  2. 如果使用的是Apple芯片,则下载“arm64”类型的文件,例如“go-darwin-arm64.pkg”,“vscode-arm64”等。你明白我的意思。
  3. 如果使用的是Intel芯片,则下载带有“amd”类型的文件。
  4. https://github.com/go-delve/delve/tree/master/Documentation/installation下载并安装“DELVE”。
  5. 运行你的调试器。

如果你想调试,让我知道,我可以提供“launch.json”文件配置。

编辑 11-04-22

分享“launch.json”

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}/main.go",
            "args": [],
        }
    ]
}

1
请问您能发布一下 launch.json 文件吗? - Ryan
嗨@Ryan,我已经分享了launch.json,请检查编辑。 - Tushar Prajapati

3

1
这让我在经过了很多努力之后解决了它。谢谢。 - goodbytes
我的问题是我没有安装gdlv,但在你的帮助下它成功了! - Edenshaw

3

✅ 解决方案 ✅

问题出在你安装了非 M1 版本的 GoLang 和/或 VSCode。Go和VSCode都有适用于Intel和苹果芯片的版本,你需要两个都是 arm64 (苹果芯片) 版本。

如果你没有使用 arm64 分发方式安装 GoLang 和 VSCode,则问题就出在这里。

解决方法:

  • 彻底从系统中删除GoLang和VSCode:
    • 完全删除GoLang
      • sudo rm -rf /usr/local/go
      • sudo rm /etc/paths.d/go
      • sudo rm -rf ~/donald/go (将donald 替换为您自己的帐户名)
        • (删除此文件是解决问题的关键)
    • 完全删除VSCode
      • rm -fr ~/Library/Preferences/com.microsoft.VSCode.helper.plist
      • rm -fr ~/Library/Preferences/com.microsoft.VSCode.plist
      • rm -fr ~/Library/Caches/com.microsoft.VSCode
      • rm -fr ~/Library/Caches/com.microsoft.VSCode.ShipIt/
      • rm -fr ~/Library/Application\ Support/Code/
      • rm -fr ~/Library/Saved\ Application\ State/com.microsoft.VSCode.savedState/
      • rm -fr ~/.vscode/
  • 下载每个GoLang和VSCode的arm64版本。
  • 安装GoLang。
  • 安装VSCode。
  • 打开VSCode。
  • 安装Go扩展程序
  • 打开一个GoLang项目/目录。
  • 它会要求您安装Go工具(如8个左右的工具)。只需单击“全部安装”
    Installing 8 tools at /Users/donald/go/bin in module mode.
    gotests
    gomodifytags
    impl
    goplay
    dlv
    staticcheck
    gopls
    go-outline
    
  • 打开要运行的.go文件。
  • 使用VS Code运行它。

就是这样!现在你应该可以开始了。


1

0

写这篇文章是为了让任何面临M1 Mac迁移问题的人都能在一个地方获得所有所需信息。

我在从我的Intel Mac迁移到M1(使用Apple Migration Assistant)后遇到了这个问题。因此,go二进制文件和amd64的vscode被复制到了M1 Mac(arm64)上。

因此,我不得不卸载(删除所有与go相关的文件,即位于/home/<my_user>/go和位于/usr/local/go的go可执行文件),并重新安装arm64的go和vscode。

之后,在使用delve调试器运行vscode时,我遇到了错误could not launch process: EOF,为了解决这个问题,我参考了这个github线程-https://github.com/go-delve/delve/issues/2794,并执行了以下步骤:

sudo rm -rf /Library/Developer/CommandLineTools

xcode-select --install

之后,我能够使用Delve在VSCode中调试代码。


0
主要的Go安装页面(https://go.dev/doc/install)为您提供了一个AMD64的“下载”按钮。 您需要前往此处: https://go.dev/dl/ 并选择正确的架构。 一旦完成,您需要像@prakash-p已经提到的那样卸载。
然后,您还需要像@iamcmnut提到的那样在vs code中重新安装go工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接