لقد قمت بتحديث التثبيت المحلي للأسماك باستخدام البيرة المنزلية إلى 020fe5ccdfbbc147977ae11803816475e9fef763 ، وهو سيغفولتس عند الإطلاق ، أثناء قراءة config.fish
.
هذا ما أراه عند تشغيله في lldb وعند تشغيله بمستوى عالٍ من الأخطاء: https://gist.github.com/thomcc/4bda5472facccd4c93884df3e3e50044 (في الواقع ، يتضمن الآن تفكيك الوظائف أيضًا).
من عمليات التجميع ، يبدو أن المترجم يسقط الاختبار مقابل child
هنا: https://github.com/fish-shell/fish-shell/blob/master/src/tnode.h#L147 ، نظرًا لأنه يفترض أن المرجع لا يمكن أبدًا أن يكون nullptr ، نظرًا لأنه UB (لاحظ أنه يعيد كتابة الوظيفة قليلاً بحيث يتخطى حتى النهاية عندما يكون nodeptr
nullptr ، لذلك فهو يعرف child
لا يمكن أن تكون خالية لهذا السبب).
قد تكون هناك مشكلات أخرى أيضًا ، بالطبع ، خاصةً إذا كانت التعليمات البرمجية الأخرى بها نفس المشكلة (على سبيل المثال ، يفترض أن المرجع يمكن أن يكون nullptr).
لسوء الحظ ، يعد هذا النوع من المشكلات أمرًا صعبًا للغاية لإعادة إصداره ، ولا يمكنني فعلاً حدوثه على تصميم خارج التثبيت من البيرة المنزلية ، على الرغم من أن كل شيء آخر يجب أن يكون هو نفسه (أعتقد أنه من الممكن أن يكون له مسار مختلف وتجد clang
مختلفًا؟ لا أعرف).
إنه موثوق بالنسبة لي داخل البيرة المنزلية.
نعم ، يمكنني إعادة إنتاج هذا باستخدام إصدارات Homebrew على نظام التشغيل macOS 10.11 أيضًا. ومن المثير للاهتمام أن الأمر يتعلق بالبيئة في مرحلة إنشاء البيرة ، حيث يؤدي تكوين الشجرة خارج Homebrew ثم تشغيل make
داخل brew sh
إلى حدوث segfault.
أوه ، واو - Homebrew بصمت يعيد كتابة الأعلام التي تم تمريرها إلى المترجم ، لذلك _that's_ رائع. لهذا السبب لا يمكنك الحصول على رموز تصحيح الأخطاء على الرغم من ظهور -g
في CXXFLAGS
.
يمكنني إعادة إنتاج هذا على macOS و Linux ./configure CXX=clang++ CXXFLAGS="-g -Os"
.
تحليل جيد! يجب إصلاحه بواسطة 5b3729842cacdf0566743e2327c99beed8f0cc6c. شكرا!
التعليق الأكثر فائدة
أوه ، واو - Homebrew بصمت يعيد كتابة الأعلام التي تم تمريرها إلى المترجم ، لذلك _that's_ رائع. لهذا السبب لا يمكنك الحصول على رموز تصحيح الأخطاء على الرغم من ظهور
-g
فيCXXFLAGS
.يمكنني إعادة إنتاج هذا على macOS و Linux
./configure CXX=clang++ CXXFLAGS="-g -Os"
.