Anda telah mengirim, menegaskan dimatikan, Anda menerima laporan kerusakan langka yang menunjukkan bahwa pelanggaran pointer nol terjadi dalam kode Anda. Dalam lingkungan pengembangan, masalahnya akan ditangkap dengan tegas.
Yang Anda miliki hanyalah laporan kerusakan, jadi mereproduksi masalah itu hampir mustahil. Mengikuti jejak balik tidak memberikan petunjuk mengapa kecelakaan itu terjadi pada awalnya.
Opsi: - Tambahkan pengecekan penunjuk untuk mencegah kerusakan. Ini akan mencegah tabrakan, tetapi Anda mungkin tidak akan tahu mengapa itu terjadi sejak awal. - Biarkan terbang, harap itu terjadi lagi dengan skenario repro
Katakanlah aplikasi tidak ditujukan untuk rudal terpandu atau sistem pengereman otomatis ...
Yang mana yang akan Anda pilih?
Jawaban:
Saya memilih pendekatan kedua. Tidak ada gunanya menyembunyikan tabrakan jika pointer NULL tidak terduga pada titik di mana tabrakan telah terjadi. Pointer NULL ini dalam banyak kasus hanya akan menjadi salah satu gejala dari sesuatu yang salah. Jika kita menyembunyikannya dengan NULL pointer, hampir pasti ada yang lain yang akan rusak. Saya merasa Anda memiliki peluang lebih baik untuk menangkap skenario jika Anda tahu titik di mana crash setiap kali bukan di tempat acak.
sumber
Seberapa sering crash terjadi? Itu terjadi hanya untuk satu dari banyak pelanggan dalam beberapa kasus yang tidak jelas? Apa konsekuensinya (kehilangan data, kerusakan sistem)? Jika itu terjadi setiap 1 dalam sejuta kasus dan mereka hanya perlu me-restart aplikasi dan tidak ada data yang hilang maka mungkin Anda tidak perlu memperbaikinya - biarkan seperti itu.
Seberapa mahal (uang dan waktu) untuk menambahkan pernyataan dan mengirimkannya ke semua pelanggan (jika hanya sebagian dari pelanggan mendapatkan versi baru maka sisanya mungkin masuk ke masalah tidak dicentang nol)? Apa peluang menemukan masalahnya? Jika Anda hanya memasukkan cek acak dalam kode berharap untuk menangkap kesalahan itu adalah praktik yang buruk ...
Bisakah masalah tersebut direproduksi di mesin pelanggan? Bisakah Anda mendapatkan akses ke mesin itu? Ini mungkin sangat berharga
Tinjau laporan kerusakan Anda dan pastikan informasi yang diberikan bermanfaat dan dapat membantu Anda mendiagnosis masalahnya
sumber
Dalam urutan tertentu itu akan ditangkap dan diperbaiki, tetapi jejak-belakang saat ini tidak pernah tertangkap.
Anda harus dapat melihat apa yang salah dengan crash dump, sudahkah Anda memeriksa parameter, dll ...?
Ekstra yang dapat dilakukan berdasarkan jumlah waktu yang ingin Anda masukkan ke dalam ini:
Arsipkan crash dump dan lihat di kode dengan komentar di baris crash,
ini memungkinkan seseorang yang memeriksa chrash dump yang sangat mirip untuk mengetahui bahwa itu telah terjadi sebelumnya ...
[waktu yang dihabiskan: singkat]
Pemeriksaan tambahan, pencatatan, ... Anda ingin mencegahnya dan mendapatkan informasi lebih lanjut lain kali.
[waktu yang dihabiskan: sedang]
Pastikan tidak mungkin memanggil aplikasi sedemikian rupa agar pelanggaran ini terjadi.
[waktu yang dihabiskan: panjang]
sumber
Hari-hari ini, saya kirim dengan tegas () dihidupkan. Itu tidak memerlukan biaya banyak dan itu bisa membuat hidup jauh lebih mudah dalam situasi yang bermusuhan (yaitu, lingkungan pelanggan Anda sering lebih bermusuhan dari lingkungan dev atau QA Anda).
sumber