Fish-shell: الأسماك segfaults عند الإطلاق (تحليل التهيئة المدمجة للسمك) عند إنشائها من HEAD مع البيرة

تم إنشاؤها على ٢٢ يناير ٢٠١٨  ·  3تعليقات  ·  مصدر: fish-shell/fish-shell

لقد قمت بتحديث التثبيت المحلي للأسماك باستخدام البيرة المنزلية إلى 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 مختلفًا؟ لا أعرف).

إنه موثوق بالنسبة لي داخل البيرة المنزلية.

bug

التعليق الأكثر فائدة

أوه ، واو - Homebrew بصمت يعيد كتابة الأعلام التي تم تمريرها إلى المترجم ، لذلك _that's_ رائع. لهذا السبب لا يمكنك الحصول على رموز تصحيح الأخطاء على الرغم من ظهور -g في CXXFLAGS .

يمكنني إعادة إنتاج هذا على macOS و Linux ./configure CXX=clang++ CXXFLAGS="-g -Os" .

ال 3 كومينتر

نعم ، يمكنني إعادة إنتاج هذا باستخدام إصدارات Homebrew على نظام التشغيل macOS 10.11 أيضًا. ومن المثير للاهتمام أن الأمر يتعلق بالبيئة في مرحلة إنشاء البيرة ، حيث يؤدي تكوين الشجرة خارج Homebrew ثم تشغيل make داخل brew sh إلى حدوث segfault.

أوه ، واو - Homebrew بصمت يعيد كتابة الأعلام التي تم تمريرها إلى المترجم ، لذلك _that's_ رائع. لهذا السبب لا يمكنك الحصول على رموز تصحيح الأخطاء على الرغم من ظهور -g في CXXFLAGS .

يمكنني إعادة إنتاج هذا على macOS و Linux ./configure CXX=clang++ CXXFLAGS="-g -Os" .

تحليل جيد! يجب إصلاحه بواسطة 5b3729842cacdf0566743e2327c99beed8f0cc6c. شكرا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات