Bir hata ayıklayıcı kullanmaktan kaçınmanın faydası nedir?


101

Kariyerim boyunca, bazı geliştiricilerin hata ayıklama araçları kullanmadığını, ancak sorunun ne olduğunu bulmak için hatalı kodları yerinde kontrol ettiklerini fark ettim.

Çoğu zaman kod hatalarını hata ayıklayıcı olmadan hızlı bir şekilde bulabilmeniz iyi bir beceri olsa da, bir hata ayıklayıcının yazım hataları gibi kolayca küçük hatalar bulduğu durumlarda sorunları aramak için çok zaman harcamak daha az verimli olur.

Hata ayıklayıcısız bir kompleksi yönetmek mümkün müdür? Tavsiye edilir mi? " Psişik hata ayıklama " kullanarak ne gibi faydalar sağlanabilir ?


19
Merhaba jonathan, bir telaşın tuzaklarından kaçınmak ve soruyu açık tutmak için sorunuzu revize ettim: bence - şimdi ifade edildiği gibi, yeterince iyi cevaplanabilir bir soru.

Örnek: Bir kod düşünün a = 6/3. Yazdığınız yazım hatası yerine a = 6/2.. Şimdi anımsatıcı düzeyinde. ADD, JMP komutlarını ve ardından 2 yerine fazladan bir yineleme olduğunu görüyorsunuz, böylelikle bölücünün bir yanlış yazım hatası. Şimdi her zaman bir hata ayıklayıcı kullanmak için ne kadar saçma çıkarım edebilirsiniz.
EAGER_STUDENT

Yanıtlar:


153

Dışarıdan tahmin etmeye benzeyen, genellikle "aklınızda hata ayıklama" dediğim şeydir. Bir bakıma, bu, büyüklerin bir satranç tahtasına bakmadan satranç oynama yeteneğine benzer.

Şu ana kadar bildiğim en etkili hata ayıklama tekniği, çünkü hiç bir hata ayıklayıcı gerektirmiyor. Beyniniz aynı anda birden fazla kod yolunu araştırıyor ve muhtemelen bir hata ayıklayıcıyla alabileceğinizden daha iyi geri dönüş sağlıyor.

Bir hata ayıklayıcının kullanılmasının değerli saniye kaybetmek anlamına geldiği rekabetçi programlama dünyasına kısa bir süre önce girmeden önce bu tekniğin farkında değildim . Yaklaşık bir yıllık yarışmadan sonra, bu tekniği neredeyse sadece ilk savunma hattım olarak kullanmaya başladım, ardından uzak üçüncü sırada oturan gerçek bir hata ayıklayıcısını kullanarak hata ayıklama günlüğünü izlemeye başladım. Bu uygulamanın yararlı bir yan etkisi, yeni hataları daha yavaş bir hızda eklemeye başladığımdı, çünkü “aklımda hata ayıklama” yeni kod yazarken durmadı.

Elbette, bu yöntemin sınırlamaları vardır, çünkü çoğunlukla kişinin kod yoluyla birden çok yolu görselleştirme konusundaki aklı sınırlamalarıdır. Aklımın bu sınırlamalarına saygı duymayı, hataları daha gelişmiş algoritmalarda düzeltmek için hata ayıklayıcıya dönmeyi öğrendim.


27
+1 "Tahmin ederek programlama" ifadesini yüklü bir cümle olarak buluyorum. Düşünmenin yerini hiçbir şey tutamaz. OP'nin açıklamadığı “tahmin etmenin” ne kadar etkili olduğu. Benim şüphem, tamamen tahmin ettiği (duvardaki spagetti gibi), ancak tümdengelimli akıl yürütmeyi kullanmak olduğu yönünde. Hata ayıklayıcıların kendi yerleri vardır, ancak tümdengelimli muhakeme ve basitçe kodu anlamak için her derde deva değiller.
Bill

8
@DJClayworth Bu tamamen doğru değil: bazen bir hata ayıklayıcı kullanmaya çalışmak, elinizde iyi bir hata ayıklayıcı olsa bile, çok fazla zaman kaybetmeden bitiyorsunuz: Aklıma hemen gelen bir dava, eşzamanlılık sorunlarını çözmektir; diğeri ise yüksek dallanma faktörlerine, bazı dinamik programlama algoritmalarına ve donanım kesme servis rutinlerine sahip özyinelemeli algoritmaları hata ayıklamaktır. Tabii ki gerçekten ihtiyacınız olduğunda bir hata ayıklayıcı kullanmak aptalca değildir, ancak bir hata ayıklayıcıya ne zaman başlamaya karar vermeniz son derece bireysel bir seçimdir.
dasblinkenlight,

9
+1, belirli hata türleri için paha biçilmez bir hata ayıklayıcı bulmama rağmen (özellikle daha karmaşık algoritmalarda) gerçekten basit bir şekilde kodu iyi anlayabilmenin yerini hiçbir şey tutamaz
Chris Browne

7
@DJClayworth "Bir ayıklayıcı iyidir kullanmadığınız zamanlarda birkaç kez" Ben kasten daha güçlü bir ifadesi için gitti: rekabetçi programlama ile kısa karşılaşma içgüdüsel bir hata ayıklayıcı ulaşan en verimli davranış olmadığını öğretti bana . Bugünlerde (1) kodu hızlı bir şekilde yeniden okudum ve (2) (3) hata ayıklayıcısına gitmeden önce (varsa) hata ayıklama izini inceliyorum. Çoğu durumda, üçüncü adım gerekli değildir, çünkü sorunu (1) veya (2) adımlarında tespit ederim, sorunu yeniden üreten bir birim testi yazarım ve bir hata ayıklayıcı kullanmadan bir düzeltmeyi kodlarım.
dasblinkenlight

10
Gerçekten demek istediğin, sihirbazın "bul bul" düğmesini tıklamak yerine, bir programcının hata ayıklama sırasına sahip olması gerektiğidir . Bir hata ayıklayıcı son derece güçlü bir araçtır, ancak çitleri düzeltmek için motorlu testereyi ateşlemeyin.
Spencer Rathbun

41

Kod tabanını ne kadar fazla bilirim, o kadar az hata ayıklayıcısına ihtiyacım olur (ancak rapor edilen hatayı kontrol edersem, bu herhangi bir nedenle önemli bir ipucudur).

Küçük ve orta karmaşıklıktaki bazı dinamik davranışları anlamak için iyi bir araçtır, ancak genellikle daha büyük resim yerine ayrıntılara odaklandığını öğrendim. Ve bir süre sonra, problemlerin olduğu yer: daha geniş kapsamda, dinamik davranışı diğer araçlarla daha kolay anlaşılabilir olma eğilimi gösteren etkileşimler (örneğin, modül sınırlarında girdi ve çıktıların kaydedilmesi).


35

Kötü programcılar olmayabilirler, ama muhtemelen korkunç derecede sorun gidericidirler.

Hata Ayıklama'dan gelen tavsiyelere uyma eğilimindeyim : En Zorlu Yazılım ve Donanım Sorunlarını Bulmak için Vazgeçilmez 9 Kural (David Agans) ve bu tamamen "Düşünmeyi bırak ve bak" rehberliğinde


12
Katılmıyorum, ancak oy vermem. Delnan'ın dediği gibi, kodun ne yaptığını anlayabiliyorsanız , hata ayıklayıcıdan geçmek ve yanlış gittiğinde bulmaya çalışmaktan daha yanlış ne olduğunu anlamak daha hızlı olabilir . Bu da onların ne zaman bir hata ayıklayıcı kullanmayı reddeden bir geliştirici, söz konusu olamaz kod okumasını sorunu tanımlamak büyük bir hata yapıyor.

@Mark artı sorunu yanlış tanılama ve yeni bir hata takma avantajı.
Keith,

11
@ Mark Bannister - Ne dediğini anlıyorum. Şunu değiştireyim, eğer 15 dakikadan fazla bir süredir kodda bir problem arıyorsanız, hata ayıklayıcısını bırakıp kullanın ve inatçı olmayın.
JohnFx

9
Bence iyi bir programcı hata ayıklayıcısına bağlı olmamalıdır . Bu, görüşünün hala yolunda olduğundan emin olmak için bir kez (mevcut olan yerlerde), görüşünün başarısız olmasına - veya periyodik olarak, onu kullanmasını engellememelidir ...
Ocak'ta

1
@ işaretini çok küçük bir kod tabanı üzerinde çalışıyorsanız sürece Ben her kod satırını anlamak imkansız olduğunu düşünüyorum. Şu anki hatalarımın% 95'i tarif ettiğiniz şekilde çözülüyor, ancak zorlayıcı olanlar hata ayıklayıcısına ihtiyaç duyduğunuz yerde.
wobbily_col

31

Herhangi bir iş, doğru araçların doğru şekilde kullanılmasını gerektirir. Bir hata ayıklayıcınız varsa, gerçekte ne olduğunu görmek için kullanın. Hataların çoğu varsayımlardan kaynaklanmaktadır.

Hata ayıklayıcıları kullanmayı reddeden geliştiricilerle çalıştım çünkü daha iyi biliyorlardı. Bir keresinde aldığım klasik cevap, 'kaza bana neden olmuyor, bütün gün kodları inceleyerek geçirdim (çarptığı yer) ve yanlış bir şey yok'. (Peki db'den okunan boş değer ne oldu?) Patron bunun iyi bir cevap olduğunu düşünüyor gibiydi, ancak müşteri yapmadı.

O takımdan olabildiğince hızlı kaçtım. Amaçları işi yumuşatmak ve gün boyu süren yoğun bir soruna basit bir 10 dakikalık problem yapmaktı.


18
+1 "Çoğu hata varsayımlardan kaynaklanmaktadır" çok akıllıca sözlerdir
ZJR

15
Tüm hataların varsayımlardan kaynaklandığını varsayıyorum. (Orada ne yaptım bakalım? = P)
dan_waterworth

4
@ ZJR: Bu yüzden assertbu kadar harika. Varsayımlarınızı kontrol edin. Onları sık sık kontrol et.
Zan Lynx

@ dan_waterworth: Doğru değil. Birincisi, bir yazım hatası olabilir.
Thomas Eding,

13

Hata ayıklama uygulamasına en iyi rehberiniz Steve McConnel'in Code Code kitabı . 23. Bölümde ayrıntılı olarak hata ayıklama yer almaktadır ve bundan birkaç puan daha çıkaracağım.

  1. Sorunu anlamak önemlidir ve hata ayıklayıcının kullanımı bunun yerine geçmez.
  2. Tahmin hata ayıklama için kötü bir yaklaşımdır. Eğer meslektaşlarınız problemi düşünmek yerine gerçekten tahminde bulunuyorlarsa, o zaman kötü bir iş yapıyorlar. Tahmin, rasgele yazdırma ifadelerini koda yapıştırmak ve yararlı bir şey bulmayı ummak anlamına gelir.
  3. Eğer meslektaşlarınız gerçekten bir hata ayıklayıcısını nasıl kullanacaklarını bilmiyorlarsa (bir tane kullanmamayı tercih etmek yerine) evet, yetersizdirler, tıpkı kullandıkları dilin sözdizimini bilmeyen biri gibi.

2
Yazınızın çoğunda sizinle aynı fikirdeyken, beceriksizliğin haksız olduğunu düşünüyorum. Bir hata ayıklayıcı kullanmadan geliştirmek mümkündür, sadece verimsizdir. Bazı insanlar diğerlerinden önce hata ayıklayıcıları öğrenir!
ChrisFletcher

"Beceriksiz" gibi sözler etrafında raslantı atmak istemem. Tamamen baskı ifadeleriyle hata ayıklayan birini tanıyorum ve yaptığı katkıyı yapmaya başka kimse yaklaşmıyor.
Mike Dunlavey,

2
@MikeDunlavey Bu kişi bir hata ayıklayıcıyı nasıl kullanacağını biliyor ve kullanmamayı seçiyor mu? İnce. Eğer bilmiyorlarsa, o zaman ifademin yanındayım.
DJClayworth

2
İstediğiniz gibi durun, bir sıfat size uygulanabileceği zaman kolayca gelebilir. O zaman anlayacaksın - bu okul bahçesi olayı.
Mike Dunlavey,

9

Söylemesi zor. Tahmin ederek hata ayıklama olabilir zaten böcek (kütüphane işlevi, muhtemelen geçersiz SQL, vb geçirilen hatalı değer) ne olduğu hakkında bir fikir varsa çalışır. Bazen hata kendisinin küçük ya da belirgin göründüğü durumlarda, "karakter arabelleği çok küçük" gibi - bunu yaptığımı kabul ediyorum - yığın izlemesi başarısız olduğu satırı gösteriyor ve bunu çözmek için bir hata ayıklayıcısına ihtiyacım yok.

Bunu her zaman yapmak verimsiz olabilir ve ilk birkaç "tahmin" başarısız olursa, tahmin etmek muhtemelen yanlış bir problem çözme stratejisidir ve gerçek bir hata ayıklayıcı çağrılmalıdır. Normalde, hata ayıklayıcıyı kullanırken kesinlikle yanlış bir şey olmadığını söyleyebilirim. .

Olduğu söyleniyor, hata ayıklayıcının doğru çalışmanın çok zor olduğu araçlar ve ortamlarla çalıştım ya da tahmin etmenin maalesef çoğu zaman daha iyi bir yaklaşım olduğu için çok az ve işe yaramaz. Uygun hata ayıklayıcıları bile olmayan bazı özel araçlarla çalıştım. Bir insanın bu tür ortamlarda çok uzun süre çalışması durumunda, sonunda hata ayıklayıcılara olan güvenini yitirmesi ve tahmin etme yaklaşımına güvenmesi olasıdır.


8

Bu konuyla ilgili tartışmanın "birim testinden" bahsetmediğinden şaşırdım.

Test odaklı bir geliştirme yaptığım için hata ayıklayıcıda çok fazla zaman geçirmiyorum. 10 yıl önce, hata ayıklayıcısını dikkatlice düzelttim:

  1. Çalıştığından emin olmak için bir kod parçası yazdıktan sonra ve
  2. Sorunu teşhis etmeye çalışmak için bir hata raporu aldığımda

10 yıl süren test geliştirme sürecinden sonra bulduğum şey, eğer bir programcı olarak daha üretken olmam:

  1. Doğru yazdığımdan emin olmak için kodu yazmadan önce birim testleri yapıyorum.
  2. Sorunu çoğaltmak ve düzeltmek için bir hata raporu aldıktan hemen sonra birim testler yazarım.

Bilgisayarın kodu çalıştırmasına ve sonucu doğrulamasına izin vermek, sonuçları zihinsel olarak doğrulamak için düşündüğümden veya kod boyunca adım attığımdan binlerce kat daha hızlıdır ve hata yapmaz.

Arada sırada hata ayıklayıcıya adım atmak zorunda kalıyorum ve hala kodu zihinsel olarak analiz etmeye çalışıyorum ... ancak nadiren ve çoğunlukla çok zor kodlar için.


+1 Bir yazdırma ifadesi eklemek ve testi yeniden başlatmak ve ardından bir hata ayıklayıcı kullanmak genellikle daha hızlıdır.
Winston Ewert,

@ winston - hata ayıklayıcısını ateşlemek, genellikle sorunlu kodun yerini bulana kadar birden fazla yazdırma ifadesi yazmaktan daha hızlı olur. Her şey değişir. Basit problemler genellikle tarif ettiğiniz gibi daha çabuk çözülür, ancak karmaşık problemler hata ayıklayıcısına ihtiyaç duyduğunuz yerdedir. Her ikisini de kullanabilmek, mutlak bir ilkeye sıkı sıkıya bağlı kalmaktan daha iyidir.
wobbily_col

7

Şahsen, şu hata ayıklayıcısının kullanımını en aza indirmeye çalışıyorum:

  • Sadece kodu analiz ederek olası hata kaynaklarına işaret eden statik denetleyiciler ve benzer derleyici seçeneklerini kullanmak
  • mümkün olan en az yan etkiye sahip , mümkün olan en işlevsel tarzda, mümkün olduğunda değişken durumu ortadan kaldırarak kod yazma
  • Minimum makul ayrıntı dereceli birim testleri yazma
  • istisnaları yutmamak

Elbette herkes hata yapar, bu nedenle programları bu şekilde oluştururken bile, bir test başarısız olursa, hata ayıklayıcısını ara ifadenin değerini denetlemek için kullanırım. Ancak, yukarıdaki ilkelere bağlı kalarak, kusurun bulunması daha kolaydır ve hata ayıklama, ağrılı, belirsiz bir işlem anlamına gelmez.


6

Mümkün olduğunda hata ayıklayıcısını kullanın. Hata ayıklayıcı, sorunu basitçe çözecektir (oh, bak bu değeri kontrol etmedik) ya da ilgili kodu analiz ederken yararlı olan çok fazla bağlam sağlayacak (vay, yığın tamamen karışık, arabellek taşması sorunu olabilir).


5

Hata ayıklama, kodunuzdaki çalışma zamanındaki nesnelerin ve değişkenlerin durumunu denetlemek için çok yararlı bir araçtır.

Yukarıdaki cevaplarda daha önce de belirtildiği gibi, hata ayıklama son derece yararlıdır, ancak bunun sınırlı olduğu bazı durumlar vardır.

Tecrübelerime göre, hata ayıklayıcısını çok yararlı buluyorum çünkü kodumun durumu hakkında yaptığım yanlış varsayımları ortaya çıkarmaya yardımcı oluyor. Bazı insanlar bir hatayı bulmak için kod okuma konusunda zekice değillerdir, bu nedenle hata ayıklama, sizin veya başka bir geliştiricinin kodun durumu hakkında yaptığı yanlış varsayımları ortaya çıkarmada yardımcı olabilir.

Belki bir yönteme geçildiğinde bir parametrenin hiçbir zaman boş kalmamasını beklersiniz, bu nedenle bu durumu hiçbir zaman denetlemez ve bu parametre hiçbir zaman boş olmaz gibi yöntemde devam edersiniz. Gerçeklik parametresi olmasıdır edecektir parametre boş olmamalıdır yöntemine ön koşul olan bile bir noktada sıfır olma sonunda. Her zaman olacak.

Yukarıda bahsedilen örneklerde hata ayıklayıcıların kullanışlılığının aksine, çok iş parçacıklı (yani eşzamanlılık, eşzamansız işlem) söz konusu olduğunda kullanmayı zor ve biraz da kullanışlı bulmuyorum. Yardımcı olabilir, ancak hata ayıklayıcının kesme noktaları A noktasındaki tek bir dişe ve B noktasındaki tamamen ayrı bir dişe çarparken yönünü kaybetmek kolaydır. Geliştirici, yeni kesme noktasını zorlamaya zorlanır " "beyninin" yığınının "üstündeki düşünce süreci ve kendisini yeni kırılma noktasındaki koda yönlendirmek. Kesme noktası B'nin uygunluğunun azalmasından sonra, geliştirici ilk kesme noktasına geri döner ve kesme noktası B'nin tetikleyicisinden önce neyi aradığını hatırlamak zorunda kalır. Bunun kafa karıştırıcı bir açıklama olabileceğini biliyorum.

Aynı zamanda eşzamanlı kodun tahmin edilemezliği, geliştiricinin eşzamanlı kodun hata ayıklama işleminde dikkatini dağıtabilir.

Sonuç olarak, dürüst görüşüme göre:

  • Eşzamanlılık kullanıldığında hata ayıklama = "hata ayıklama düşünce modelinin" odağını kaybetme eğilimi arttı

ve

  • her zaman = artan hata ayıklama verimliliği b / c, dikkatinizi beklenmedik sınır değerler (yarış koşullarından dolayı beklenmeyen) ile kesintiye uğratmaz.

2
Geleneksel hata ayıklayıcıların yararlılığının sıklıkla sıfıra yakın bir oranda azaldığı eşzamanlı ortamlarda hata ayıklama sorununu gündeme getirmek için +1.
dasblinkenlight

4

Sanırım biraz fazla sert oluyorlar. Şahsen bir hatayla karşılaştığımda, kodu yeniden kontrol ediyorum, aklımda program mantığından izlemeye çalışıyorum, çünkü bu bazen bazen debbuger'ı kullanmaktan ve kendisinin tezahür ettiği hatayı düzeltmekten daha kolay diğer sorunları veya yan etkileri ortaya çıkarmama yardımcı oluyor .

Çivilediğimi düşündüğüm zaman bile, haklı olduğumdan emin olmak için genellikle hata ayıklarım. Sorun biraz daha karmaşık olduğunda, hata ayıklamanın kesinlikle gerekli olduğuna inanıyorum.

Ayrıca ... sadece benim görüşüme göre, modern bir IDE'nin masaya getirebileceği araçlardan iyi bir şekilde yararlanamamak için hiçbir bahane yok. İşinizi daha hızlı ve daha güvenilir bir şekilde tamamlamanıza yardımcı olursa, kullanmanız gerekir.


4

Genelleştirmekten nefret ediyorum, ancak tanıştığım birçok programcı bir sorunu çözmenin tek bir yolu olduğunu düşünüyor (onların yolu). Her olası testin düşünülmüş olduğunu varsaymak kolaydır. Farklı bir bakış açısı çok değerli olabilir.

Deneme ve yanılma ile programlama, bazı yeni harika yaklaşımlar ortaya çıkarabilir ve başkalarının kaçırdığı şeyleri yakalayabilir.

Dezavantajı, genellikle çok daha uzun sürer.


4

Erm, kişiye bağlı. Şahsen ben hata ayıklayıcıları o kadar kullanmıyorum Mikro denetleyicileri programladığımda, temelde LED'leri kullanıyorum ya da EEPROM'lara veri kodunu "hata ayıklamak" için veri yazıyorum. JTAG kullanmıyorum.

Bilgisayarlar veya sunucular için yazılım programladığımda, günlüğe kaydetme ve çok sayıda konsol çıktısı kullanmaya meyilliyim. C tarzı diller için önişlemci direktiflerini kullanıyorum ve Java'da günlük seviyelerini kullandım.

Hata ayıklayıcı kullanmadığım için yanlış bir şey yaptığımı söyler misiniz? Bu bana editörlük işleri, bana sözdizimsel hatalarımın nerede olduğunu göstermek ve mantıklı bir hata olduğunda sadece testler yapmak zorundayım.


4

Bir hata ayıklayıcı kullanmaya ihtiyaç duymama ve bir hata ayıklayıcıyı nasıl kullanacağını (veya reddetmeyi bilmeme) arasında bir fark vardır. Hata ayıklayıcı, hataların izlenmesi ve düzeltilmesinde kullanılacak birçok araçtan yalnızca biridir. Bunu kafasında çözebilecek geliştiriciler ve yapabileceklerini düşünen diğer kişilerle çalıştım.

En iyi karışım, kodunuzu yazmaktır, böylece birim testleriyle test etmek kolaydır ve hataları kaydeder. Öyleyse, günlüklere bakmaya veya hata ayıklayıcıyı kullanmana gerek kalmayacağını umarsın. Sigorta almak gibi bir şey. Umarım asla kullanmanıza gerek kalmaz, ancak bir kez kodu tekrar kontrol ederek çözemediğiniz bir hatayla karşılaştığınızda, uygun hata işleme / kayıt, birim testleri eklemek veya hata ayıklayıcı kullanmayı öğrenmek için geç kalır.

Farklı araçlar / platformlar farklı hata ayıklama tekniklerini (hata ayıklayıcı, günlük kaydı, birim testleri vb.) Tercih eder. Bir geliştirici, platform / araç için kullanılan tekniklerin birkaçına aşina olduğu sürece, sadece kodu yeniden kontrol etmek arasında olabilir. yetenekli bir geliştirici, ancak hata ayıklama söz konusu olduğunda sadece bir numara yaparlarsa, sonunda bir hataya rastlayamazlar ya da bulamazlar.


4

Pek çok cevap, ancak Heisenbug hakkında bir söz değil mi?!?!

Heisenbugs, çıktı ifadelerini eklemek veya bir hata ayıklayıcıda çalıştırmak gibi bir programda hata ayıklama girişimlerinin yaygın olarak yapılması, genellikle kodu değiştirmek, değişkenlerin bellek adreslerini değiştirmek ve yürütmenin zamanlaması nedeniyle oluşur.

Hata ayıklayıcıyı kullanıyorum, sadece en kötü durumda (bulması zor hatalar için). Ayrıca, birçok tanınmış geliştiricinin / test edicinin konuştuğu en iyi uygulamalara göre, kodu iyice test etmek iyi olur. Bu yolla, sorunların çoğunu karşılayabilirsiniz ve bu nedenle hata ayıklayıcıyı kullanmaya gerek kalmaz.


3

Geçenlerde burada hata ayıklayıcıda hata ayıklamaya karşı bir tartışma okudum (ya da StackOverflow?). Kodunuza karşı test durumları olmalı. Testleriniz başarılı olursa, hata ayıklama işleminiz muhtemelen hatayı kullanmayacak (varsayım: test verilerinize benzer verilerle hata ayıklayacaksınız).

Diğer taraftan, günlüğe kaydetme zorunludur. Testlerinizi geçip üretime dağıtırsanız, bir hatanız olduğunu görebilirsiniz. Böceğin kanıtı geçmişte olan bir şeyden geliyor. yani birisi, “Bu oraya nasıl girdi?” diyor. Kayıtlarınız iyi değilse, sebebini asla bulamazsınız. Bir hata ayıklayıcı bile bu noktada işe yaramayabilir, çünkü verinin gerçekte ne gibi göründüğünü bilmiyorsunuzdur. Uygulamanın günlüklerinden hata ayıklayabilmeniz gerekir.

Ne yazık ki, ben biraz paraphrasing ve orijinal argüman bir kötüye yapıyor olabilir. Özellikle, “Geliştirme zamanını desteklemek için önemli hata ayıklama yardımcıları var” konumu, hata ayıklayıcıların önemine dik olabilir. Ancak, sistem durumunu ayarlamadaki zorluğun bir parçası olarak hata ayıklamayı hata bulmada faydalı kılan bir şey düşünmek için beni etkiledi.


3

İyi birim testleri ve geri izlemeyi sağlayan istisnalar sayesinde, nadiren hata ayıklayıcı kullanmak zorunda kalırsınız.

En son hata ayıklamayı kullandığımda, bazı eski uygulamalarda bir çekirdek dosyam oldu.

Ben bir "deuguger minion" muyum, yoksa bu adamlar "çok sert" mi?

Ne. Onlar sadece hayatlarını zorlaştırmaktan hoşlanan tür insanlardır.


2

Hata ayıklama sadece iyi bir geliştiricinin profesyonelce kullanması gereken bir araçtır.

Elbette bazen kod tabanını biliyorsanız, hatanın nerede olduğunu kalpten öğrenebilirsiniz. Ancak aynı zamanda sadece koda bakarak sinir bozucu bir hata bulmak için bütün bir gün veya haftayı kaybedebilirsiniz.

Dinamik olarak yazılmış dillerde bir tür hata ayıklama olmadan (sadece konsola değer atıyor olsa bile) tahmin etmek bazen imkansız hale gelir.

Bu yüzden sorunuzu cevaplamak için - belki onlar mükemmel programcılar, ancak sorun giderme becerileri ve av hataları kötü olduğunda yeterlilikleri.


2

Bir sorunun kapsamına bağlıdır. Program küçükse ve işler iyi bölünmüşse, muhtemelen onu arayarak çözebilirsiniz. Program birkaç yıl boyunca 100'den fazla kişiden oluşan bir ekip tarafından geliştirilen 4,5 milyon kod satırıysa, belirli hataların tespit edilmesi imkansız olacaktır.

Söz konusu programda söz konusu olan (C cinsinden) hafızanın üzerine yazılmış bir bellekti. Bellek kesme noktasına sahip hata ayıklayıcı, hata göründüğü anda rahatsız edici kod satırını tanımlar. Ancak bu durumda, birisinin kendi dizisini yazdığı bir noktayı tanımlamak için 4,5 milyon kod satırının tümünü okuyup saklayabilmesi mümkün değildir (artı, devasa programın durumu için hafızanın çalışma zamanı düzenini bilmeleri gerekirdi) bu noktaya ulaşmak için uzun bir girdiler dizisine yaklaşık 10 dakika).

Olma noktası: Küçük programlarda veya modüler olarak yüksek olan şeylerde, hata ayıklayıcı olmadan kurtulabilirsiniz. Program gerçekten büyük ve karmaşıksa, hata ayıklayıcı size çok fazla zaman kazandırabilir. Diğerlerinin de söylediği gibi, bu bir araçtır ve başka bir yöntemin üstünde kaldığı durumlara ve en iyi seçenek olmadığı diğerlerine göredir.


0

Hata, müşterinin bilgisayarında veya ortamının sizinkinden çok farklı olduğu bir bilgisayarda meydana gelirse, bir hata ayıklayıcı / uzaktan hata ayıklayıcıyı ayarlamak zahmetlidir. Yani, tarladan bir böcek aldığınız soğuk gün için, 'ama ... ben bir hata ayıklayıcım yok' cevabı yardımcı olmaz. Bu nedenle, sadece kod ve kayıt dosyalarının anlaşılması yoluyla hatayı bulma ve hatayı bulma konusunda bir beceri seti geliştirmelisiniz.


-1

Ne kadar saçma: "Gerçek Programcıların Hata Ayıklayıcılara ihtiyacı yok." Gerçek bir programcının herhangi bir IDE'ye ihtiyacı olmadığını söyleyebilirim, bana bir not defteri ve donuk bir kalem verin. Hata ayıklayıcı, üretkenliğe yardımcı olan diğer benzeri bir araçtır.

Ayrıca, hata ayıklama koduyla görev yapan herkesin söz konusu koda aşina olmadığını düşünün. Çoğu zaman müteahhitleri, olanları yalnızca genel bir idealin olduğu bir ortama girerler. Hatta bir ortamın - ya da 20 yıllık bir şema haritasının ayrıntılı bir açıklaması ve arkans adlandırma kurallarına rehberlik edebilir (tablo X1234 ve tablo X4312 arasındaki F1, F2 ve F3 alanlarıyla arasındaki farkı anlamaya çalışın [evet, bunun gibi çöpler] var] yeni olduğunuzda), ancak çoğu zaman bu açıklama yanlıştır; Aksi takdirde, neden bir "gizem" hatası var.

Çevreye yeni gelen biri olarak, saatlerce veya günler eşleyerek ve düzeltebileceğiniz ve ardından bir daha bakmanıza gerek kalmayan büyük bir veritabanını "tanıyarak" harcayabilirsiniz. Bu büyük bir zaman ve para kaybı. Hata ayıklayıcısına erişiminiz varsa, neler olduğunu görün, düzeltin ve birkaç dakika içinde gittiğinizi görün. Tüm bu "hata ayıklayıcılara ihtiyacınız yok" kandırıcısı sadece elitist kabarıklık.


2
Bu saman adam rant sorulan soruyu cevaplamıyor, hiçbir yerde "Gerçek Programcıların Hata Ayıklayıcılara İhtiyacı Yok" diye bir açıklama yok
gnat
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.