Monterey 12.0.1 上的 bug

最近换上了 MacBook Pro 2021,也慢慢将工作转到新的电脑上。结束了一年多的黑白配,之前工作主力机是我的黑苹果,配置以及 OpenCore 的引导放在这里了。

为了稳定性,系统一直停留在了 10.15.4。新的电脑拿到手就是 12.0.1,之前也就在我另一台 2016 款的 macbook pro 上用过几个周的 12.0.0。

新的系统加上新的架构,不免有有些 bug,今天就说下我所遇到的两个比较棘手的。

1. 安全相关

EXC_BAD_ACCESS (SIGKILL (Code Signature Invalid))

公司的核心产品是用 c++ 开发的,编译之后我都习惯性的放到 /usr/local/bin 目录中。在新系统中,就出现了上面的错误(从控制台获取),运行的时候进程直接被 kill。

网上查了下,说与 kernel cache 有关,重启可解决。

This was caused by kernel caching of previously signed binaries and my replacing those binaries with newly compiled binaries which weren’t part of a signed package.

By deleting the existing binaries, rebooting the Mac to clear the kernel cache, and then recopying the new binaries into place, I sorted the issue.

但是每次都要重启有点麻烦,通过与旧电脑中目录对比,最后将二进制文件直接复制到 /opt/homebrew/bin 解决,这个目录的 ownership 不是 root 的。

如果问题还会出现,可以做一个软链接将二进制文件链接到 /opt/homebrew/bin 下。

2. Clang 版本

这个问题也是排查了版本,还是使用公司产品的时候遇到的。当处理的 JSON 中包含数组,比如 {"a": []},应用启动失败。从控制台来看,错误码是 EXC_BAD_ACCESS (SIGSEGV),报错的堆栈正好是在处理 JSON array。

有问题的版本:

Apple clang version 13.0.0 (clang-1300.0.29.3)
Target: arm64-apple-darwin21.1.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

正常的版本:

Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: arm64-apple-darwin20.1.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

最后在构建的时候,将 CMAKE_BUILD_TYPE 设置为 Debug 临时解决。Debug 模式下编译器不做任何优化。

期待系统升级能够修复。

comments powered by Disqus