Fish-shell: Segfaults ikan saat diluncurkan (mengurai config.fish bawaan) saat dibuat dari HEAD dengan homebrew

Dibuat pada 22 Jan 2018  ·  3Komentar  ·  Sumber: fish-shell/fish-shell

Saya telah memperbarui instalasi lokal ikan saya menggunakan homebrew ke 020fe5ccdfbbc147977ae11803816475e9fef763, dan itu gagal saat diluncurkan, saat membaca config.fish .

Inilah yang saya lihat ketika menjalankannya di lldb dan ketika menjalankannya dengan --debug-level tinggi: https://Gist.github.com/thomcc/4bda5472facccd4c93884df3e3e50044 (sebenarnya, sekarang termasuk fungsi pembongkaran juga).

Dari pembongkaran, sepertinya kompiler menjatuhkan tes untuk child sini: https://github.com/fish-shell/fish-shell/blob/master/src/tnode.h#L147 , karena diasumsikan bahwa referensi tidak akan pernah menjadi nullptr, karena itulah UB (perhatikan bahwa ia menulis ulang fungsi sedikit sehingga melompat ke akhir ketika nodeptr adalah nullptr, jadi ia tahu child tidak bisa nol karena alasan itu).

Mungkin ada masalah lain juga, tentu saja, terutama jika kode lain memiliki masalah yang sama (misalnya menganggap referensi bisa nullptr).

Sayangnya, masalah semacam ini sangat sulit untuk direpro, dan saya tidak dapat benar-benar mewujudkannya pada build di luar pemasangan dari homebrew, meskipun yang lainnya harus sama (saya kira mungkin saja ia memiliki jalur yang berbeda dan menemukan clang ? Saya tidak tahu).

Ini dapat diandalkan untuk saya di dalam homebrew.

bug

Komentar yang paling membantu

Oh, wow - Homebrew secara diam-diam menulis ulang flag yang diteruskan ke kompiler, jadi _itu_ luar biasa. Itu sebabnya Anda tidak bisa mendapatkan simbol debug meskipun -g tampaknya berada di CXXFLAGS .

Saya dapat mereproduksi ini di macOS dan Linux dengan ./configure CXX=clang++ CXXFLAGS="-g -Os" .

Semua 3 komentar

Ya, saya dapat mereproduksi ini dengan Homebrew build di macOS 10.11 juga. Menariknya ini ada hubungannya dengan lingkungan di tahap pembuatan Homebrew, karena mengonfigurasi pohon di luar Homebrew lalu menjalankan make di dalam brew sh menghasilkan segfault.

Oh, wow - Homebrew secara diam-diam menulis ulang flag yang diteruskan ke kompiler, jadi _itu_ luar biasa. Itu sebabnya Anda tidak bisa mendapatkan simbol debug meskipun -g tampaknya berada di CXXFLAGS .

Saya dapat mereproduksi ini di macOS dan Linux dengan ./configure CXX=clang++ CXXFLAGS="-g -Os" .

Analisis yang bagus! Harus diperbaiki dengan 5b3729842cacdf0566743e2327c99beed8f0cc6c. Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat