C, Objective-C veya C ++ olarak kodlarsanız , kaynağınızı gerçekten çalıştırmadan eleştirmek için CLang Static Analyzer'ı kullanabilirsiniz.
Kullanılabilecek bazı bellek hata ayıklama araçları vardır: ValGrind, Mac OS X'te Guard Malloc, * NIX'te Elektrikli Çit.
Bazı geliştirme ortamları, yeni atanan sayfaları ve yeni serbest bırakılan sayfaları çöple doldurmak, ayrılmamış işaretçilerin serbest kaldığını tespit etmek ve her bir yığın bloğundan önce ve sonra veri ayıklayıcı olmak üzere bazı veriler yazmak gibi bir hata ayıklama belleği ayırıcısı kullanma seçeneği sunar Bu verinin bilinen şekli değişse bile denir.
Slashdot'taki bazı adamlar, hata ayıklayıcıdaki tek adımlı yeni kaynak satırından çok değerli olduğunu söyledi. “İşte bu” dedi. Onun tavsiyelerine her zaman uymam, ama sahip olduğumda bana çok yardımcı oldu. Yaygın olmayan bir kod yolunu uyaran bir test durumunuz olmasa bile, bu tür yolları almak için hata ayıklayıcınızdaki bir değişkeni, örneğin bir bellek ayırarak, ardından yeni işaretçinizi NULL yerine NULL değerine ayarlamak için hata ayıklayıcısını kullanabilirsiniz. hafıza adresi, ardından tahsisat başarısız işleyicisini adım adım izleyin.
İddiaları kullanın - C, C ++ ve Objective-C'deki assert () makrosu. Diliniz bir güvenlik işlevi sağlamazsa, kendiniz bir tane yazın.
Varlıkları liberal olarak kullanın, ardından kodunuzda bırakın. Assert () “Test etmeye devam eden test” diyorum. Onları en çok, fonksiyonlarımın çoğu giriş noktasında ön koşulları kontrol etmek için kullanıyorum. Bu, Eyfel programlama dilinde yerleşik olan “Sözleşme ile Programlamanın” bir parçası. Diğer kısım ise post koşullardır, diğer bir deyişle, fonksiyon dönüş noktalarında assert () kullanılır, ancak ondan daha fazla ön koşul almadığımı anlıyorum.
Sınıf değişmezlerini kontrol etmek için assert kullanabilirsiniz. Hiçbir sınıfın hiçbir şekilde değişmez olması zorunlu olmamakla birlikte, en hassas şekilde tasarlanmış sınıfların hepsinde vardır. Sınıf değişmezliği, nesnenizi geçici olarak tutarsız bir duruma getirebilecek üye işlevlerinin içinde dışındaki her zaman doğru olan bir durumdur. Bu tür işlevler geri dönmeden önce tutarlılığı her zaman geri almalıdır.
Böylece her üye işlevi giriş ve çıkışta değişmezleri kontrol edebilir ve sınıf CheckInvariant adlı başka bir kodun herhangi bir zamanda çağırabileceği bir işlev tanımlayabilir.
Kaynağınızın hangi satırlarının gerçekten test edildiğini kontrol etmek için bir kod kapsamı aracı kullanın, ardından test edilmemiş satırları uyaran testleri tasarlayın. Örneğin, uygulamanızı çok az fiziksel bellekle yapılandırılmış bir VM içinde ve takas dosyası ya da çok küçük bir dosya olmadan çalıştırarak düşük bellek işleyicilerini kontrol edebilirsiniz.
(Bir nedenden ötürü hiç bir zaman mahrem olmadığım halde, BeOS takas dosyası olmadan çalışabilirken, bu şekilde oldukça kararsızdı. BFS dosya sistemini yazan Dominic Giampaolo, hiçbir zaman BeOS'u takas etmeden çalıştırmamı istedi. neden önemli olması gerektiğine bakın, ancak bir çeşit uygulama artefaktı olmalı.)
Ayrıca, kodunuzun G / Ç hatalarına yanıtını da sınamalısınız. Tüm dosyalarınızı bir ağ paylaşımına kaydetmeyi deneyin, ardından uygulamanızın iş yükü yüksekken ağ kablosunu çıkarın. Bir ağ üzerinden iletişim kuruyorsanız, kabloyu çıkarın ya da kablosuz bağlantısını kapatın.
Özellikle sinir bozucu bulduğum bir şey, sağlam Javascript koduna sahip olmayan web siteleri. Facebook'un sayfaları düzinelerce küçük Javascript dosyası yüklüyor, ancak herhangi biri indirmeyi başaramazsa, sayfa kırılıyor. Bir hata toleransı sağlamanın, bir yüklemeyi yeniden denemenin ya da komut dosyalarınızın bazılarını indirmediğinde bir tür makul geri dönüş sağlamanın bir yolu olmalı.
Uygulamanızı hata ayıklayıcıyla ya da * NIX'teki "kill -9" ile öldürmeyi deneyin, büyük, önemli bir dosya yazmanın tam ortasında. Uygulamanız gayet iyi düzenlenmişse, dosyanın tamamı yazılır veya hiç yazılmaz veya belki de kısmen yazılırsa, yazılanlar bozulmaz, hangi veriler tarafından tamamen kullanılabilir hale gelir dosyayı yeniden okuduktan sonra app.
veritabanlarında her zaman hataya dayanıklı disk G / Ç bulunur, ancak başka hiçbir uygulamada bulunmaz. Günlüklü dosya sistemleri, elektrik kesintisi veya çökmesi durumunda dosya sisteminin bozulmasını önlerken, son kullanıcı verilerinin bozulmasını veya kaybolmasını önlemek için hiçbir şey yapmazlar. Bu, kullanıcı uygulamalarının sorumluluğundadır, ancak veritabanlarından başka hiçbiri hataya dayanıklılık göstermez.