Anda telah mengirim, Anda mendapatkan kesalahan seg langka. Pointer memeriksa atau melepaskannya?

9

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?

MM01
sumber
Kecuali jika ini rethorical, mungkin berguna untuk mengirim laporan kerusakan bersama dengan file kode yang sesuai (mungkin di Pastebin.com) ke situs Stack Overflow jika Anda ingin ini diselesaikan ...
Tamara Wijsman
2
@ TomWij: Jangan berpikir begitu ... itu kemungkinan besar akan ditutup karena "terlalu terlokalisasi"
Naveen
@Naveen: Mungkin ... Saya bukan pengunjung SO biasa jadi ini adalah komentar SU-mind.
Tamara Wijsman
1
@Naveen: Terlalu lokal berarti terlalu regional, ini tentang geografi dan bukan tentang spesialisasi masalah. Tetapi pertanyaan ini mungkin akan ditutup pada SO oleh subjektivitas.
Maniero

Jawaban:

7

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.

Naveen
sumber
1
Saya condong ke pendapat ini sendiri. Persepsi pengguna adalah yang membuat saya khawatir. Kecelakaan jelas terlihat seperti ada masalah. Namun, jika suatu fitur mendapatkan perhitungan yang sepenuhnya salah, ini juga akan diperhatikan.
MM01
2
Menurut pendapat saya meskipun pengguna mungkin jengkel oleh crash sesekali, mereka akan benar-benar kesal jika memberikan hasil yang salah karena mungkin tidak diperhatikan.
Naveen
macet sedini mungkin, ini membantu Anda menemukan masalah, dan membantu pengguna kehilangan lebih sedikit data
Spudd86
juga saya akan menggunakan valgrind untuk mencari tahu apa yang saya lakukan salah (atau setidaknya saya akan mencoba, dalam hal apa pun itu mungkin menemukan beberapa masalah yang harus Anda perbaiki) Saya akan menambahkan konfirmasi tambahan untuk mencoba menangkap pointer NULL sebelumnya dan minta pengguna untuk mencoba menjalankan build yang telah menyatakan dihidupkan untuk sementara waktu untuk melihat apakah mereka bisa membuatnya crash lebih awal
Spudd86
3
  1. 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.

  2. 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 ...

  3. Bisakah masalah tersebut direproduksi di mesin pelanggan? Bisakah Anda mendapatkan akses ke mesin itu? Ini mungkin sangat berharga

  4. Tinjau laporan kerusakan Anda dan pastikan informasi yang diberikan bermanfaat dan dapat membantu Anda mendiagnosis masalahnya

Victor Hurdugaci
sumber
2

Dalam lingkungan pengembangan, masalahnya akan ditangkap dengan tegas.

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]

    Pelanggaran pointer kosong terjadi pada kode Anda.

  • Pastikan tidak mungkin memanggil aplikasi sedemikian rupa agar pelanggaran ini terjadi.
    [waktu yang dihabiskan: panjang]

Tamara Wijsman
sumber
1
Posting ini tidak begitu banyak tentang pendekatan untuk memecahkan masalah, tetapi lebih pada tindakan dalam situasi hipotetis (yaitu dalam kerangka waktu yang dialokasikan, sumber masalah tidak dapat disimpulkan).
MM01
2

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).

Mitch Haile
sumber