Pencari berhenti tanpa diduga. Tetapi mengapa?
Laporan ranap sistem boleh membawa kepada petunjuk tentang sebab apl ranap dalam macOS. Berikut ialah cara untuk memahami perkara yang sebenarnya dikatakan oleh laporan tersebut tentang Mac anda.
Anda mungkin pernah melihat makluman Finder apabila apl berhenti secara tiba-tiba pada Mac anda.
Dikenali dalam dunia pengaturcaraan sebagai”ranap”, ralat ini biasanya berlaku apabila sekeping kod yang buruk mula dijalankan yang sistem atau CPU tidak dapat laksanakan. Ia juga boleh berlaku jika apl cuba mengakses versi perpustakaan atau rangka kerja yang hilang atau lapuk dan tidak dapat melaksanakan sekeping kod yang diperlukan.
Apabila macOS memaparkan salah satu makluman ranap sistem ini, anda boleh sama ada mengklik butang”Abaikan”atau anda boleh mengklik butang”Laporkan”.
Jika anda mengklik butang”Laporkan”, Finder memaparkan tetingkap dengan laporan ranap sistem dan butang”Hantar kepada Apple”. Anda harus menghantar laporan kepada Apple jika perisian Apple yang menyebabkan ralat.
Setiap laporan ranap sistem disimpan dalam fail.ips dalam folder”DisagnosticReports”di dalam folder pengguna anda di/Users/~/Library/Logs/
Anda juga boleh melihat dan membuka laporan ini dalam apl Konsol Apple dengan memilih item”Laporan Ranap”di sebelah kiri tetingkap Console, memilih laporan di sebelah kanan tetingkap dan kemudian Control-klik atau klik kanan laporan dan memilih”Dedahkan dalam Pencari”daripada menu timbul.
Ini membuka folder DiagnosticReports dalam Finder, mendedahkan semua fail laporan ranap sistem yang disimpan. Laporan ini hanya disimpan oleh macOS untuk tempoh masa yang terhad, dan kemudian secara automatik mula memadamkan laporan tertua dahulu.
Terdapat juga item menu”Alih ke Sampah”dalam menu timbul Konsol jika anda ingin mengalihkan fail laporan ranap sistem yang dipilih ke Sampah.
Jika anda mengklik dua kali pada fail.ips dalam Finder, ia hanya membukanya semula dalam apl Console. Jika anda Control-klik fail.ips dalam Finder dan pilih”Open With”, kemudian”TextEdit”daripada menu pop timbul, anda juga boleh membuka fail.ips dalam TextEdit.
Berhati-hati bahawa teks setiap laporan yang disimpan dalam fail.ips adalah dalam format JSON , jadi anda perlu boleh membaca JSON untuk memahaminya.
Membaca laporan ranap sistem dalam Console
Pada sebarang kadar, jika anda memilih laporan ranap sistem dalam Console, anda boleh membaca teksnya dalam anak tetingkap teks utama di bawah ia:
Mari kita lihat beberapa medan pertama dalam laporan ranap sistem.”Proses”dalam UNIX bermaksud aplikasi yang sedang berjalan. Medan ialah:
Proses-apl atau nama proses. Laluan-tempat binari apl hidup pada cakera. Pengecam-biasanya nama binari atau berkas, tetapi tidak selalu. Versi-versi binari atau ??? jika tidak diketahui. Jenis Kod-Intel atau Apple Silicon.”Universal”jika kedua-duanya. Proses Ibu Bapa-perduaan atau aplikasi yang melancarkan proses ini. ID Pengguna-id UNIX atau PID proses-ID proses yang sama seperti yang ditunjukkan dalam Terminal.
Seterusnya, kami mempunyai tarikh/masa, versi OS, versi laporan dan UUID unik untuk laporan ini. Terdapat juga ID tidur/bangun yang unik.
Laporan itu juga menyenaraikan sama ada Perlindungan Integriti Sistem didayakan atau tidak.
Seterusnya, laporan menyenaraikan butiran tentang ranap sistem itu sendiri. Maklumat ini boleh menjadi agak teknikal dan biasanya bertujuan untuk pengaturcara atau untuk Apple untuk mengesan tempat masalah berlaku dalam kod aplikasi supaya ia boleh dibetulkan.
Biasanya, nombor utas yang ranap akan disenaraikan-dalam kes ini utas pertama-utas 0. Fikirkan utas sebagai laluan kod yang berjalan secara bebas daripada kod lain. Pada sistem CPU berbilang teras, setiap teras boleh mempunyai satu atau lebih benang berjalan dengan semua teras berjalan selari jika diperlukan. Ini dikenali sebagai pengkomputeran selari.
Seterusnya, jenis ranap atau pengecualian disenaraikan:
Jenis Pengecualian: EXC_CRASH (SIGABRT)
Dalam kes ini, SIGABRT-isyarat UNIX untuk membatalkan, atau membunuh, benang telah dihantar. Isyarat ialah mesej yang UNIX hantar kepada proses yang sedang berjalan pada tahap rendah untuk memberitahu mereka melakukan sesuatu-dalam kes ini, untuk berhenti.
Maklumat lanjut tentang isyarat UNIX dan cara ia berfungsi tersedia dalam talian.
Seterusnya ialah kod pengecualian, jika ada, tetapi ini selalunya sifar.
“0x”sebelum setiap kod bermakna nilai kod adalah dalam perenambelasan atau”hex”bukannya perpuluhan. Perenambelasan ialah sistem nombor asas-16-dengan enam belas nilai bukannya sepuluh seperti yang ada pada sistem nombor perpuluhan. Hex menggunakan 0-9 dan kemudian A-F sebagai nilai tambahan.
Anda boleh membaca tentang cara sistem nombor hex berfungsi dalam mana-mana buku yang bagus tentang bahasa pengaturcaraan C.
Seterusnya ialah sebab penamatan, yang biasanya merupakan perihalan seperti bahasa Inggeris tentang punca ranap itu. Dalam kes ini”Namespace DYLD, Kod 1 Perpustakaan tiada”.
DYLD ialah Pemuat Dinamik-bahagian OS yang secara dinamik memuatkan kod ke dalam memori daripada cakera apabila ia perlu dijalankan. Anda boleh membaca lebih lanjut tentang DYLD dalam Terminal dengan menaip man dyld dan menekan Return.
Ruang nama ialah konvensyen penamaan yang digunakan dalam beberapa bahasa pengaturcaraan untuk mengasingkan bahagian kod daripada kod lain.”Pustaka Kod 1 tiada”bermakna DYLD cuba memuatkan perpustakaan yang dipautkan secara dinamik tetapi tidak dapat.
Dalam pengaturcaraan, perpustakaan ialah himpunan kod. Pustaka boleh sama ada statik (dipautkan ke dalam apl pada masa binaan) atau dinamik (dimuatkan ke dalam apl pada masa jalanan).
Jika ralat itu ialah ralat pemuatan DYLD, baris seterusnya memberitahu kami pustaka mana ia berada dan tempat ia berada pada cakera:
“Pustaka tidak dimuatkan: @rpath/VBoxRT. dylib”
Dalam kes ini VBoxRT.dylib ialah perpustakaan dinamik (.dylib) untuk aplikasi Kotak Maya Oracle. DYLD mencari pustaka dinamik VBoxRT.dylib tetapi tidak menjumpainya jadi apl tidak dapat dijalankan dan telah menghantar isyarat SIGABRT untuk memberitahunya untuk keluar.
Apl untuk macOS dan iOS sebenarnya terdiri daripada beberapa komponen-biasanya folder yang dipanggil Bundle
Dalam contoh ini, kita boleh melihat binari apl di dalam folder MacOS di dalam Kandungan folder dalam app bundle:
Terdapat juga folder Perpustakaan dan kemudian kedua-duanya Perpustakaan Apple Silicon dan Intel x86 dalam folder dalam format.dylib untuk kedua-dua seni bina platform Mac. Mereka dimuatkan pada masa jalan seperti yang diperlukan oleh DYLD.
Sesetengah app bundle boleh menjadi agak mudah, yang lain sangat kompleks. Kod dan sumber lain boleh disimpan di tempat lain, di luar app bundle.
Dalam contoh di atas,.dylib disimpan secara luaran dan biasanya akan dimuatkan apabila diperlukan pada masa jalan..dylibs biasanya binari tunggal dan bukannya berkas.
Terdapat juga sokongan dalam iOS dan macOS untuk Rangka Kerja, yang merupakan himpunan yang mengandungi kod dan sumber lain. Anda boleh mengintip ke dalam rangka kerja dalam Finder dengan cara yang sama anda boleh melihat ke dalam app bundle menggunakan menu pop timbul yang dinyatakan di atas. Rangka kerja sentiasa mempunyai nombor versi di dalam berkas mereka.
Frameworks boleh disimpan di dalam app bundle atau dalam/Library/Frameworks dan/user/~/Library/Frameworks. Kebanyakan macOS dan iOS sendiri dilaksanakan sebagai rangka kerja yang boleh dimuatkan secara dinamik.
Apple mempunyai panduan pengaturcaraan Rangka Kerja pembangun yang menerangkan secara terperinci proses pemuatan dan pengikatan untuk kod macOS dan iOS. Menyambung dua keping kod yang berkaitan secara statik dipanggil memaut, bukannya mengikat, dan dilakukan apabila aplikasi dibina dengan pengkompil.
Kod statik semuanya dimuatkan serentak, yang boleh menggunakan lebih banyak memori sistem.
Apple juga mempunyai dokumen pembangun berasingan yang memperincikan masa jalan Objektif-C dan Swift, yang kedua-duanya mengandungi maklumat tambahan tentang cara kod dimuatkan semasa pelaksanaan apl.
Pemuatan kod dinamik bermula sejak akhir 1970-an dengan bahasa seperti SmallTalk. Pada platform Apple, ia terhasil sebagai hasil daripada Apple membeli NeXT pada tahun 1997-dan bersama-sama dengannya, memperoleh bahasa pengaturcaraan NeXT Objective-C yang mempelopori penggunaan pautan dinamik dan introspeksi.
NeXTStep Developer-salah satu pakej pembangun pertama yang gunakan pengikatan dinamik.
Hari ini, perisian Apple masih ditulis sama ada dalam Objective-C atau Swift Apple sendiri, yang juga menggunakan pemautan dan pemuatan dinamik.
Pemuatan dinamik membolehkan apl mempunyai jejak memori yang lebih kecil kerana tidak semua kod dan sumber apl perlu dimuatkan ke dalam memori sekaligus. Kelemahan pemuatan dinamik ialah kadangkala lebih perlahan, kerana sumber perlu dimuatkan daripada cakera semasa apl sedang berjalan.
Ini adalah salah satu sebab biasa untuk kursor bola pantai berputar macOS yang terkenal.
Seterusnya dalam laporan ranap sistem, kami diberitahu proses panggilan atau perduaan kod yang dipanggil kod yang menyinggung perasaan, disenaraikan di bawah”Dirujuk daripada:”. Dalam kes ini, ia adalah perduaan aplikasi VirtualBox utama yang disimpan di dalam berkas aplikasi.
Bit terakhir maklumat yang boleh dibaca bahasa Inggeris ialah”Sebab:”, yang cuba memberikan sebab yang boleh dibaca manusia mengapa ranap itu berlaku:
“‘/usr/lib/VBoxRT.dylib'(tiada fail sedemikian, bukan dalam cache dyld), (dasar keselamatan tidak membenarkan @ pengembangan laluan)
(ditamatkan semasa pelancaran; abaikan jejak belakang)”.
Ini bermakna perpustakaan yang diperlukan sepatutnya berada di/usr/lib/VBoxRT.dylib pada cakera tetapi tidak (ia biasanya diletakkan di sana oleh pemasang VirtualBox pada masa pemasangan), DYLD tidak dimuatkan sebelum ini itu, dan apl itu telah dibunuh semasa pelancaran.
Jadi untuk meringkaskan, dalam contoh di atas, VirtualBox telah dilancarkan tetapi perpustakaan dinamik yang diperlukan yang tidak dapat ditemui, jadi ia telah dibunuh oleh macOS dan ia berhenti. Semua maklumat telah dikumpulkan dan ditambahkan pada laporan ranap sistem.
Maklumat Konsol Tambahan dan surih tindanan
Maklumat lain dalam laporan ranap sistem adalah lebih teknikal jadi kami tidak akan membincangkan setiap butiran di sini , tetapi terdapat beberapa perkara yang anda boleh baca dengan cepat untuk menentukan perkara yang berlaku.
Khususnya, anda boleh mengikuti pelaksanaan kod apl, dalam susunan terbalik yang disenaraikan di bawah setiap nombor urutan, untuk mencari petunjuk tentang sebab ranap sistem berlaku. Bukan semua ranap sistem dan berkaitan dengan perpustakaan yang hilang, jadi mungkin apl itu dilancarkan dengan betul tetapi terdapat hanya ralat pengaturcaraan dalam kod yang menyebabkan ranap sistem.
Kadangkala pengaturcara akan membuat kesilapan memanggil kod sistem yang tidak wujud atau telah menukar parameter fungsinya. Atau ia mungkin ralat capaian memori, atau menimpa pembolehubah dalam kod dengan terlalu banyak data yang biasanya menimpa sesuatu yang bersebelahan dalam memori yang penting.
Semua ralat ini boleh menyebabkan ranap sistem.
Maklumat ini biasanya disenaraikan sejurus selepas bahagian”Sebab:”, dan biasanya mempunyai senarai panggilan fungsi bernombor, dengan nama mereka, alamat dalam ingatan dan cara ia dimuatkan. Ambil perhatian bahawa dalam bahagian ini, anda ingin membaca senarai fungsi (dipanggil jejak tindanan), dalam susunan terbalik-dari bawah ke atas.
Ini ialah susunan fungsi yang sebenarnya dilaksanakan.
Dalam kes ini, tindanan adalah sangat pendek dan kebanyakannya terdiri daripada penyediaan DYLD dan isyarat berhenti/batu kerana perpustakaan yang diperlukan tidak dapat dimuatkan semasa pelancaran. Tetapi beberapa ralat boleh mempunyai susunan yang agak kompleks.
Biasanya, fungsi terakhir di bahagian atas (hujung) timbunan ialah yang menyebabkan masalah-tetapi tidak selalu.
Mengetahui perkara ini berguna untuk mendiagnosis ranap sistem kerana timbunan boleh memberitahu anda panggilan fungsi tepat yang gagal. Anda kemudian boleh melihat nama fungsi itu dalam dokumentasi pembangun Apple untuk mendapatkan lebih banyak petunjuk tentang apa yang berlaku.
Kadangkala rangka kerja atau nama perpustakaan yang mengandungi fungsi ranap akan disenaraikan dalam surih tindanan, yang memberikan lebih banyak maklumat.
Selepas blok tindanan dalam laporan ranap sistem ialah beberapa maklumat keadaan benang, yang tidak benar-benar relevan melainkan anda seorang pembangun, diikuti dengan CPU mana benang itu sedang berjalan, kod ralat jika ada, dan nombor Perangkap. Perangkap ialah titik sisipan dalam kod OS yang dipanggil apabila beberapa peristiwa berlaku.
Memori ranap dan ringkasan
Seterusnya terdapat beberapa maklumat tentang binari (kod terkumpul) yang terlibat dalam ranap sistem-dan ini biasanya, tetapi tidak selalunya maklumat yang sama seperti yang disenaraikan berhampiran bahagian atas laporan ranap sistem.
Selepas itu, terdapat Ringkasan Pengubahsuaian Luaran-ringkasan ID proses yang berinteraksi dengan proses ini, dan beberapa maklumat Memori Maya (VM) tentang bahagian kod yang berada dalam ingatan dan yang masih dalam cakera. Memori maya merujuk kepada ruang cakera yang digunakan oleh OS seolah-olah ia adalah RAM sebenar untuk meningkatkan jumlah memori tersedia yang digunakan oleh sistem.
Kemudian terdapat beberapa maklumat”jenis wilayah”yang meringkaskan maklumat tambahan tentang tindanan, VM, segmen pautan dan teks serta DYLD serta memori kongsi. Anda biasanya boleh mengabaikan maklumat ini melainkan anda seorang pembangun.
Pada penghujung setiap laporan ranap sistem, terdapat bahagian”Laporan Penuh”, yang pada asasnya merupakan pembuangan JSON mentah penuh bagi keseluruhan fail.ips dalam format teks. JSON mentah mengandungi beberapa maklumat tambahan yang tidak ditunjukkan dalam tetingkap Konsol-seperti ID model Apple Mac, jenis CPU, tandatangan kod dan maklumat lain.
Juga ambil perhatian bahawa apl mungkin mempunyai berbilang urutan berjalan, jadi ringkasan yang serupa seperti di atas akan disenaraikan untuk setiap urutan. Tetapi biasanya, nombor utas yang ranap disenaraikan di bahagian paling atas laporan supaya anda tahu nombor utas yang hendak dilihat.
Semua ini mungkin kelihatan memberangsangkan kepada pendatang baru, tetapi setelah anda membiasakan diri membaca laporan ranap sistem, anda biasanya boleh mengetahui perkara yang berlaku dengan cepat dan mudah-dan jika anda boleh berbuat apa-apa mengenainya. Dalam contoh di atas, memandangkan perpustakaan yang diperlukan tiada, pemasangan semula mudah apl menggunakan pemasangnya akan teratur.
Apple menyediakan Panduan Pengguna Konsol terperinci dalam talian, yang cukup bermaklumat dan membantu.