2011-05-23 24 views
5

Debug.Assert'i bir certion işlemi yaparken yapmaya çalışan bir kütüphane kullanıyorum, Debug.Assert'i kullanmaktan vazgeçmek var mı?Dur Debug.Assert?

+3

Elbette. Ve sonra program, Assert'te devletin herhangi bir yolsuzluğu tespit edildiğinde devam edecek ve felaket sizi en iğrenç bir şekilde görecektir. Neden itirazda bulunmaya itiraz etmiyorsun? –

+1

@Jeffrey: sizin noktanız iyi alınmış olsa da, muhtemelen iddialar hatalıdır; Kod doğruysa, ilk etapta bir itiraz ateşi yapmanın bir yolu olmamalıdır. İddia, muhtemelen kütüphanedeki bir hatayı gösterir, arayanın kodundaki bir hatayı değil. Eğer Levi hatanın iyi huylu olduğunu tespit ederse, o zaman kod düzeltilene kadar savı bastırmak faydalı olabilir. –

+0

@Eric Lippert - Kütüphane yazarının Assert'in doğru kullanımını anlayamadığını düşündüm (asla ateş etmemesi gerektiğinden), ancak ilk önce çekinin yapılmasının bir nedeni olmalı. Belki de bir istisnanın atılması gereken bir şeydir. Önemli olmayan bir durum için bir test eklemiş olmaları muhtemel görünmüyor. Ama sonra tekrar yaptılar. Eğer öyleyse, belki de bu hatalar olmadan başka bir kütüphane aranmalıdır! :) –

cevap

10

ardından Marc doğru derlenmiş olacak, tanımlanmış DEBUG sembol olmadan derlemek; Sadece DEBUG tanımlanmadan yeniden derleyin ve tüm iddialar ortadan kalkar.

Bunu yapamıyorsanız, kitaplığın kaynak kodunu bilmiyorsanız, programınızı Trace Listeners temizleyebilirsiniz. Bu şekilde itiraz ateşlendiğinde, hala patlar ama hiçbir şey yapmaz. (Ne zaman bir onaylama işlemi yangınlar, sadece dinleyicileri kayıtlı hangi iz bakar ve iddiayı hakkında bilgilendirmektedir. Hiçbir dinleyici hiçbir şey olmaz anlamına gelir.)

Bu senaryoda, bir müşteri iz varsayılan iz dinleyici değiştirilmesi düşünebilirsiniz Kendinizin dinleyicisi gibi bir şey yapan bir dosyaya iddiayı kaydeder. Bu şekilde, günlüğü gözden geçirebilir ve kütüphanenin hata ayıklama sürümünün "normal" yürütülmesinde hangi iddiaların atılacağını görebilirsiniz.

8

sonra Debug.Assert için hiçbir aramalar (yöntemleri [Conditional("DEBUG")] ile tanımlanır) Eğer kütüphane yeniden derlemek Eğer

0

İkili mi kullanıyorsunuz yoksa kitaplık kaynağınız var mı? Eski durumda, neden bir Hata Ayıklama oluşturup bırakmadıklarını öğrenmek için satıcınızla görüşmenizi ve kodundaki bir hata olan Assert hakkında bilgi vermenizi öneririm (Kodun beklenen şekilde yürütülmesi durumunda iddianın başarısız olması durumunda bile onaylama hatalarının oluşmaması gerekir) . istisnai durumlar)

İlgili konular