Fish-shell: Erreurs de segmentation de poisson au lancement (analyse de config.fish intégrée) lors de la construction à partir de HEAD avec homebrew

Créé le 22 janv. 2018  ·  3Commentaires  ·  Source: fish-shell/fish-shell

J'ai mis à jour mon installation locale de fish en utilisant homebrew vers 020fe5ccdfbbc147977ae11803816475e9fef763, et il se bloque au lancement, tout en lisant config.fish .

Voici ce que je vois lorsque je l'exécute dans lldb et lorsque je l'exécute avec un --debug-level élevé : https://gist.github.com/thomcc/4bda5472facccd4c93884df3e3e50044 (en fait, il inclut désormais également les désassemblages de fonctions).

D'après les désassemblages, il semble que le compilateur abandonne le test pour child ici : https://github.com/fish-shell/fish-shell/blob/master/src/tnode.h#L147 , puisqu'il suppose qu'une référence ne peut jamais être nullptr, puisque c'est UB (notez qu'il réécrit un peu la fonction pour qu'elle saute à la fin lorsque nodeptr est nullptr, donc il sait child ne pouvait pas être nul pour cette raison).

Il pourrait également y avoir d'autres problèmes, bien sûr, surtout si un autre code a le même problème (par exemple, suppose qu'une référence pourrait être nullptr).

Malheureusement, ce genre de problème est très difficile à reproduire, et je ne peux pas le faire sur une version en dehors de l'installation à partir d'homebrew, même si tout le reste devrait être le même (je suppose qu'il est possible qu'il ait un chemin différent et trouve un autre clang ? Je ne sais pas).

C'est fiable pour moi dans les homebrews, cependant.

bug

Commentaire le plus utile

Oh, wow - Homebrew réécrit silencieusement les drapeaux passés au compilateur, donc _c'est_ génial. C'est pourquoi vous ne pouvez pas obtenir de symboles de débogage même si -g semble être dans CXXFLAGS .

Je peux reproduire cela sur macOS et Linux avec ./configure CXX=clang++ CXXFLAGS="-g -Os" .

Tous les 3 commentaires

Oui, je peux également reproduire cela avec les versions Homebrew sur macOS 10.11. Il est intéressant de noter que cela a quelque chose à voir avec l'environnement dans la phase de construction de Homebrew, car la configuration de l'arborescence en dehors de Homebrew puis l'exécution de make intérieur de brew sh produit une erreur de segmentation.

Oh, wow - Homebrew réécrit silencieusement les drapeaux passés au compilateur, donc _c'est_ génial. C'est pourquoi vous ne pouvez pas obtenir de symboles de débogage même si -g semble être dans CXXFLAGS .

Je peux reproduire cela sur macOS et Linux avec ./configure CXX=clang++ CXXFLAGS="-g -Os" .

Belle analyse ! Devrait être corrigé par 5b3729842cacdf0566743e2327c99beed8f0cc6c. Merci!

Cette page vous a été utile?
0 / 5 - 0 notes