Crash Reporter baru dari Bun
(bun.sh)Crash Reporter baru dari Bun
- Di Bun v1.1.5, dibuat format laporan crash baru untuk Zig dan C++
- Laporan crash dimasukkan ke dalam URL sekitar 150 byte yang sama sekali tidak berisi informasi pribadi
Mengapa tidak menggunakan crash reporter bawaan OS?
- Beberapa OS seperti macOS memiliki crash reporter bawaan, tetapi biasanya debug symbol harus disertakan bersama aplikasi
- Debug symbol untuk Linux sekitar 30MB, untuk macOS sekitar 9MB
- Di Windows, file
.pdblebih dari 250MB - Ukurannya terlalu besar untuk ditambahkan ke semua berkas instalasi Bun
- Namun tanpa debug symbol, informasi crash menjadi sangat terbatas, dan karena ASLR semua alamat fungsi menjadi tidak berguna
Crash reporter baru
- Di Bun v1.1.5, saat terjadi crash atau panic, sebuah pesan akan ditampilkan
- Jika tautan
bun.reportdiklik, pengguna akan diarahkan ke formulir issue GitHub yang sudah terisi sebelumnya dengan stack trace yang dienkode di dalam URL
Membuat alamat menjadi berguna
- Alamat fungsi adalah pointer ke memori tempat kode aplikasi dimuat, dengan offset yang diacak demi alasan keamanan
- Triknya adalah cukup mengurangkan alamat dasar biner dari alamat tersebut
- Tiap platform memiliki API yang berbeda, jadi dalam praktiknya fungsi ini jauh lebih kompleks
- Alamat hasilnya masih memuat offset terhadap image
- Untuk mengenkode URL yang lebih pendek, offset ini dihapus, tetapi harus ditambahkan kembali sebelum dilakukan remapping
Struktur URL bun.report
- Jika dianalisis bagaimana URL tersebut dienkode:
- Platform : satu karakter yang menunjukkan platform.
wadalah x86_64 Windows,Madalah aarch64 macOS, dan seterusnya - Subcommand : satu karakter yang menunjukkan subcommand seperti
bun test,bun install,bun run, dan sebagainya - Commit SHA : commit SHA dari versi Bun saat ini. Ini digunakan nanti untuk mengambil debug symbol
- Feature Flags : penanda untuk API dan fitur yang digunakan sebelum Bun crash
- Alamat stack trace : alamat yang dihitung sebelumnya
- Tipe crash : satu karakter yang menunjukkan jenis crash
- Pesan crash : pesan dari crash, dengan format yang berbeda tergantung tipenya
- Platform : satu karakter yang menunjukkan platform.
VLQ itu menyenangkan
- Agar URL tetap cukup pendek, alamat stack trace dienkode menggunakan base64 variable-length quantity numbers
- Angka kecil bisa dienkode dengan lebih sedikit karakter sambil tetap memungkinkan angka besar untuk dienkode
- Ini adalah teknik yang sama yang digunakan untuk menyimpan nomor baris di source map JavaScript
Apa itu "Feature"?
- URL juga mengenkode integer 64-bit, di mana setiap bit sesuai dengan apakah fitur tertentu di Bun digunakan atau tidak
- Flag ini memberi petunjuk tentang API dan sistem yang mungkin menyebabkan crash
- Metaprogramming compile-time Zig memungkinkan bitfield ini dibuat dengan mudah
- Sudah ada kontainer variabel global untuk pelacakan fitur
- Dengan
std.meta, daftar fitur dapat diiterasi dan daftar bisa dibuat - Lalu dapat dibuat packed struct yang diturunkan secara dinamis agar menggunakan satu bit per fitur
Bagaimana perbandingannya dengan core dump?
- Core dump berisi jauh lebih banyak informasi, tetapi ukurannya besar, baru berguna jika ada debug symbol, dan berpotensi memuat banyak informasi sensitif atau rahasia
- Mereka ingin menghindari kemungkinan source code JavaScript/TypeScript, environment variable, atau informasi penting lain terkirim dalam laporan
- Inilah alasan hanya stack trace Zig/C++ dan beberapa detail lain yang dikirim
- Alih-alih mengirim semuanya secara default, pendekatan ini (mungkin) hanya mengirim hal-hal yang diperlukan untuk mendiagnosis masalah
Demo
- Sebuah web app kecil untuk menguji crash reporter tersedia di halaman utama bun.report
- Jika
/viewditambahkan ke akhir URL laporan crash, Anda akan sampai ke sana
Bun sedang merekrut di San Francisco
- Jika Anda tertarik pada proyek seperti ini, mereka sedang merekrut engineer di San Francisco
- Mereka mencari system engineer yang akan membantu membangun masa depan JavaScript
Pendapat GN+
-
Dibanding mengirim seluruh file crash dump yang bisa berisi informasi sensitif seperti data pribadi, pendekatan mengirim laporan crash yang hanya terdiri dari informasi minimum yang diperlukan tampak seperti pendekatan yang baik.
-
Dibanding core dump, kelebihannya adalah bisa menyediakan informasi yang dibutuhkan dengan ukuran jauh lebih kecil, tetapi ada juga kekurangan bahwa informasi yang diperlukan untuk debugging bisa jadi kurang. Karena tambahan informasi bisa diminta dari pengguna bila perlu, kekurangan ini tampaknya bisa ditutupi sampai batas tertentu.
-
Ide mengenkode alamat stack trace dengan VLQ sangat mengesankan. Ini adalah cara yang efisien untuk menyampaikan banyak informasi dalam ukuran kecil. Fakta bahwa ini adalah teknik yang digunakan pada source map JavaScript juga terasa seperti contoh pemanfaatan yang menarik.
-
Secara keseluruhan, tampaknya banyak pertimbangan dan ide kreatif tertanam dalam perancangan sistem pelaporan crash ini. Melalui laporan crash nyata, ini sepertinya dapat sangat berkontribusi pada peningkatan stabilitas dan kemudahan penggunaan Bun.
-
Jika diperlukan informasi tambahan yang tidak disediakan dalam laporan dasar, pengguna tampaknya harus memahami dan memberikan informasi tentang setiap field di laporan crash secara manual, yang bisa sulit dipahami jika bukan pengguna tingkat lanjut. Mungkin layak juga mempertimbangkan cara untuk membuatnya lebih ramah pengguna.
Belum ada komentar.