Fish-shell: 使用自制软件从 HEAD 构建时,启动时的 Fish 段错误(解析内置 config.fish)

创建于 2018-01-22  ·  3评论  ·  资料来源: fish-shell/fish-shell

我已经使用自制软件将我的本地鱼安装更新为 020fe5ccdfbbc147977ae11803816475e9fef763,并且它在启动时出现段错误,同时读取config.fish

这是我在 lldb 中运行它以及以高 --debug 级别运行它时所看到的: https ://gist.github.com/thomcc/4bda5472facccd4c93884df3e3e50044(实际上,它现在也包括函数反汇编)。

从反汇编来看,编译器似乎在这里放弃了child的测试: https : nodeptr为 nullptr 时跳到最后,所以它知道child因此不能为空)。

当然,也可能存在其他问题,特别是如果其他代码具有相同的问题(例如,假设引用可能为 nullptr)。

不幸的是,这种问题很难重现,而且我实际上无法在从自制软件安装之外的构建中发生它,即使其他一切都应该是相同的(我想它可能有不同的路径并且正在寻找不同的clang ?我不知道)。

不过,它在自制软件中对我来说是可靠的。

最有用的评论

哦,哇 - Homebrew 默默地重写了传递给编译器的标志,所以 _that's_ 真棒。 这就是为什么即使-g似乎在CXXFLAGS也无法获得调试符号的原因。

我可以用./configure CXX=clang++ CXXFLAGS="-g -Os"在 macOS 和 Linux 上重现这个。

所有3条评论

是的,我也可以使用 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 修复。 谢谢!

此页面是否有帮助?
0 / 5 - 0 等级