我已经使用自制软件将我的本地鱼安装更新为 020fe5ccdfbbc147977ae11803816475e9fef763,并且它在启动时出现段错误,同时读取config.fish
。
这是我在 lldb 中运行它以及以高 --debug 级别运行它时所看到的: https ://gist.github.com/thomcc/4bda5472facccd4c93884df3e3e50044(实际上,它现在也包括函数反汇编)。
从反汇编来看,编译器似乎在这里放弃了child
的测试: https : nodeptr
为 nullptr 时跳到最后,所以它知道child
因此不能为空)。
当然,也可能存在其他问题,特别是如果其他代码具有相同的问题(例如,假设引用可能为 nullptr)。
不幸的是,这种问题很难重现,而且我实际上无法在从自制软件安装之外的构建中发生它,即使其他一切都应该是相同的(我想它可能有不同的路径并且正在寻找不同的clang
?我不知道)。
不过,它在自制软件中对我来说是可靠的。
是的,我也可以使用 macOS 10.11 上的 Homebrew 构建来重现这一点。 有趣的是,这与 Homebrew 构建阶段的环境有关,因为在 Homebrew 外部配置树然后在brew sh
内部运行make
brew sh
会产生段错误。
哦,哇 - Homebrew 默默地重写了传递给编译器的标志,所以 _that's_ 真棒。 这就是为什么即使-g
似乎在CXXFLAGS
也无法获得调试符号的原因。
我可以用./configure CXX=clang++ CXXFLAGS="-g -Os"
在 macOS 和 Linux 上重现这个。
好分析! 应该由 5b3729842cacdf0566743e2327c99beed8f0cc6c 修复。 谢谢!
最有用的评论
哦,哇 - Homebrew 默默地重写了传递给编译器的标志,所以 _that's_ 真棒。 这就是为什么即使
-g
似乎在CXXFLAGS
也无法获得调试符号的原因。我可以用
./configure CXX=clang++ CXXFLAGS="-g -Os"
在 macOS 和 Linux 上重现这个。