前言
最近使用macmini m4在使用golang debug发现一些奇怪的问题,debug到c代码,莫名其妙,而且不知道什么原因,知道搜索查询,才发现是苹果的Command Line Tools 的锅,macOS 15果然是一堆bug,毕竟笔者前面还写了Chrome本地网络访问的bug,系统真是一言难尽啊。
bug
macOS 15.6
Command Line Tools 不知道什么版本,反正是最新版,是系统自动更新的,问题刚好就出在这
问题:
- go的main 方法执行debug调试,所有断点都到:asm_arn64.s@runtime·systemstack_switch。这都c代码了,但是console打印日志却能正确显示,且不调试却看不出任何问题
- 调试协程代码断点直接: proc.go@gopark() ,其实导致调试功能完全无法使用。
笔者在网上搜索发现goland出现过这种问题,直到jetbrains看到bug,但是因为是苹果开发工具bug,所以只能苹果修复,或者用低版本的开发工具解决。
解决办法
参考:https://youtrack.jetbrains.com/issue/GO-18407/After-upgrading-my-Mac-to-macOS-15.4-the-debugging-feature-in-GoLand-2024.3.5-no-longer-works-as-expected.-The-debugger-always
据说macOS15.4开始就。。。
解决办法是手动下载Command Line Tools 16.2版本安装
实际上就是执行
sudo rm -rf /Library/Developer/CommandLineTools
然后去:Command Line Tools for Xcode 16.2
下载xcode工具包,手动安装,然后千万别在系统更新中,自动更新了
验证:安装后不需要重启任何软件即可生效
总结
苹果的硬件其实非常好,做工和质量都不错,但是软件真是一言难尽,尤其是开发工具macOS一言难尽啊,这种致命的bug,从macOS15.4到现在都没修复,还有Chrome那个本地网络,这都是开发者的噩梦。
顺便分享怎么解决go delve debug时版本太旧的问题,常见于旧版本的IDE不兼容新版本的go语言的debug调试工具。
version of Delve is too old for Go version 1.25.0 (maximum supported version 1.24)
以笔者Fleet为例,在console日志可以找到Fleet的dlv路径
/Users/huahua/Library/Caches/JetBrains/Fleet/intellij-plugin-2/fleet-backend-252.16528.tar.zst_47bfeabd36fe55589b53edbb31628c1f/FleetBackend 2025.2 EAP.app/Contents/plugins/go-plugin/lib/dlv/mac
然后执行:
go install github.com/go-delve/delve/cmd/dlv@latest
在用户目录的go/bin 下复制dlv文件替换idea的dlv文件即可解决问题。