Sevk ettiniz, nadir bir seg hatası alıyorsunuz. İşaretçi kontrol mü yoksa bıraksın mı?


9

Gönderdiniz, ekler kapalı, kodunuzda boş bir işaretçi ihlali olduğunu belirten nadir bir kilitlenme raporu alıyorsunuz . Bir geliştirme ortamında, sorun bir iddia tarafından yakalanmış olurdu.

Tüm sahip olduğunuz bir kilitlenme raporu, bu yüzden sorunu yeniden üretmek neredeyse imkansız. Geri izlemeyi takip etmek, kazanın ilk etapta neden olduğuna dair hiçbir ipucu vermiyor.

Seçenekler: - Çökmeyi önlemek için işaretçi kontrolü ekleyin. Bu, çökmeyi önleyecektir, ancak muhtemelen ilk başta neden olduğunu bile öğrenemezsiniz. - uçmasına izin verin, umarım bir repro senaryosu ile tekrar olur

Uygulamanın güdümlü bir füze veya otomatik fren sistemi için tasarlanmadığını varsayalım ...

Hangi seçerdiniz?


Bu yeniden düşünülmedikçe, çözülmesini istiyorsanız, kilitlenme raporunu ilgili kod dosyalarıyla (belki de Pastebin.com'da) Yığın Taşma sitesine birlikte göndermek yararlı olabilir ...
Tamara Wijsman

2
@TomWij: Sanmıyorum .. büyük olasılıkla "çok yerel" olarak kapanacak
Naveen

@Naveen: Belki ... Ben düzenli bir SO ziyaretçi değilim, bu yüzden bu SU-zihin yorumuydu.
Tamara Wijsman

1
@Naveen: Çok yerelleştirilmiş çok bölgesel anlamına gelir, bu konu coğrafya ile ilgilidir ve sorunun uzmanlaşmasıyla ilgili değildir. Ancak bu soru muhtemelen SO'ya öznelliği nedeniyle kapalı olacaktır.
Maniero

Yanıtlar:


7

İkinci yaklaşımı seçtim. NULL işaretçisi kilitlenmenin meydana geldiği noktada beklenmediyse, kilitlenmenin gizlenmesinin bir anlamı yoktur. Çoğu durumda bu NULL işaretçisi sadece yanlış bir şeyin belirtilerinden biri olabilir. Bir NULL işaretçisi ile kontrol edersek, başka bir şeyin kırılacağı neredeyse kesindir. Rastgele bir yerde her seferinde çöktüğü noktayı biliyorsanız, senaryoyu yakalamak için daha iyi bir şansınız olduğunu hissediyorum.


1
Bu görüşe kendim yaslanıyorum. Beni endişelendiren şey kullanıcı algısı. Bir çarpışma açıkça bir şeyler ters gitti gibi görünüyor. Ancak, bir özellik tamamen yanlış bir hesaplama ise, bu da fark edilecektir.
MM01

2
Bence kullanıcı ara sıra çarpışmadan rahatsız olsa da, fark edilmeyebileceği için yanlış sonuç verirse gerçekten üzülecekler.
Naveen

olabildiğince erken çökmesi, sorunu bulmanıza yardımcı olur ve kullanıcının daha az veri kaybetmesine yardımcı olur
Spudd86

Ayrıca neyi yanlış yaptığımı öğrenmek için valgrind kullanırdım (ya da en azından denerdim, her durumda düzeltmeniz gereken bazı sorunları bulabilir) Daha önce NULL işaretçisini yakalamayı denemek için ek ekler eklerim ve kullanıcıdan daha önce çökmesini sağlayabileceklerini görmek için bir süre açık olduğu iddia edilen bir
yapıyı denemesini isteyin

3
  1. Çökme ne sıklıkla gerçekleşir? Bu, bazı belirsiz durumlarda birçok müşteriden birinde olur mu? Sonuçları nelerdir (veri kaybı, sistem çökmesi)? Bir milyon vakada her 1 olur ve uygulamayı yeniden başlatmaları gerekiyorsa ve hiçbir veri kaybolmuyorsa, muhtemelen düzeltmenize gerek yoktur - bu şekilde bırakın.

  2. Ekleri eklemek ve tüm müşterilere göndermek için ne kadar pahalı (para ve zaman) (müşterilerin sadece bir kısmı yeni sürümü alırsa, geri kalanı kontrol edilmemiş null sorununa girebilir)? Sorunu bulma şansı nedir? Sadece hatayı yakalamak için kodda rastgele kontroller koyarsanız, o zaman kötü bir uygulamadır ...

  3. Sorun müşterinin makinesinde yeniden oluşturulabilir mi? O makineye erişebilir misin? Bu gerçekten değerli olabilir

  4. Kilitlenme raporlarınızı gözden geçirin ve verilen bilgilerin yararlı olduğundan ve sorunu teşhis etmenize yardımcı olabileceğinden emin olun.


2

Bir geliştirme ortamında, sorun bir iddia tarafından yakalanmış olurdu.

Belirli bir düzende yakalanmış ve düzeltilmiş olurdu, ancak mevcut geri iz asla yakalanmamıştır.
Çökme dökümü ile neyin yanlış gittiğini görebilmelisiniz, parametreleri kontrol ettiniz mi, vb ...?

Buna koymak istediğiniz süreye göre yapılabilecek ekstralar:

  • Çökme dökümü arşivleyin ve çöktüğü satırda bir yorum ile kodda bakın ,
    bu çok benzer bir döküntü dökümü inceleyen biri daha önce olduğunu bilmek için izin verir ...
    [harcanan süre: kısa]

  • Ek denetimler, günlük kaydı, ... Bunu önlemek ve bir dahaki sefere daha fazla bilgi almak istiyorsunuz.
    [harcanan zaman: orta]

    Kodunuzda boş işaretçi ihlali oluştu.

  • Bu ihlalin gerçekleşmesi için uygulamayı bu şekilde çağırmanın imkansız olduğunu kontrol edin .
    [harcanan zaman: uzun]


1
Bu yazı, konuyu çözme yaklaşımı ile ilgili değil, daha ziyade varsayımsal bir durumda eylemin seyri (yani tahsis edilen zaman diliminde, sorunun kaynağı çıkarılamadı).
MM01

2

Bugünlerde assert () açıkken gönderiyorum. Çok pahalıya mal olmaz ve düşmanca durumlarda hayatı çok daha kolay hale getirebilir (yani, müşterinizin ortamları genellikle geliştirici veya KG ortamlarınızdan daha düşmanca olur).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.