Neden ters hata ayıklama nadiren kullanılır? [kapalı]


56

gdb , 2009 yılında ters hata ayıklama için destek uyguladı (gdb 7.0 ile). 2012 yılına kadar hiç duymadım. Şimdi bazı hata ayıklama sorunları için son derece yararlı buluyorum. Bunu daha önce duymayı diledim.

Yanılıyorsam düzelt beni ama benim izlenimim, tekniğin hala nadiren kullanıldığı ve çoğu insanın var olduğunu bilmediği yönünde. Neden?

Ters hata ayıklama kullanımının yaygın olduğu herhangi bir programlama topluluğunu biliyor musunuz?

Arkaplan bilgisi:


47
Varolduğunu bilmeyenlerin yararına , ters hata ayıklama nedir?
Mason Wheeler

5
MS, kendi hata ayıklama olarak adlandırdığınız şeye benzeyen sistem intellitrace adını verdi, ortama bağlı olarak daha az kullanılan görünüme bağlı olarak birden fazla ad meselesi olabilir.
Ryathal

1
Sadece buna değecek bir şey için: fark ettiğinizden çok daha eski - Microsoft bunu QuickC'de destekledi (bellek işe yararsa 1989 ya da 90'larda).
Jerry Coffin,

41
@MasonWheeler, açıkça ters hata ayıklama koda hata ekleme eylemidir. OP'nin bu alışılmadık bir uygulama olduğu fikrine katılmıyorum.
Ben Lee,

3
@BenLee, biz buna hata ayıklama diyoruz.
OldFart

Yanıtlar:


26

Birincisi, kayıt açıkken hata ayıklama modunda çalışmak, normal hata ayıklama moduna kıyasla çok pahalıdır; ayrıca çok daha fazla hafıza tüketir.

Granülerliği hat seviyesinden fonksiyon çağrısı seviyesine düşürmek daha kolaydır. Örneğin, eclipse'deki standart hata ayıklayıcı, tüm parametrelerin sıfırlanmasıyla temelde fonksiyonun başlangıcına bir geri dönüş olan "çerçeveye bırakma" yapmanızı sağlar (öbek üzerinde hiçbir şey yapılmaz ve finallybloklar yürütülemez. , bu nedenle gerçek bir ters hata ayıklayıcı değildir, bu konuda dikkatli olun).

Bunun birkaç yıldır mevcut olduğunu ve hot-code değiştirme ile birlikte çalıştığını unutmayın.


1
Çok iyi cevap. Kaydın pahalı olduğunu onaylayabilirim. Başvurunuzun kritik bölümünü girmeden hemen önce etkinleştirmeniz gerekir; bu her zaman önemsiz değildir. Ayrıca "çerçeveye bırakma" nın genellikle yeterince iyi olduğu konusunda hemfikirim. Yine de döngüler veya özyinelemeli algoritmalar ile iyi çalışmaz.
Philipp Claßen

2
Bu rr'ye ( rr-project.org ) kadar. rr kullanarak bir uygulama kaydederken hız ancak yavaş. Daha sonra tekrar oynayabilir, içeri girebilir , geri sarabilir, izleyicileri favori IDE'nize ayarlayabilirsiniz ( github.com/mozilla/rr/wiki/Using-rr-in-an-IDE ) ... Kodunuzda hata ayıklama işlemi asla aynı.
jyavenard

11

Daha önce de belirtildiği gibi, performans, örneğin, gdb'nin tersine çevrilebilen hata ayıklama işleminde önemlidir; Bununla birlikte ticari alternatifler var: Undo undo.io için çalışıyorum ve UndoDB ürünümüz de aynı şeyi yapıyor ancak 2x'den daha az bir yavaşlama ile. Diğer ticari ters çevrilebilir hata ayıklayıcılar da var.


1
İlginç, kesinlikle bir deneyeceğim. Birçok makalede, ticari olmayan kullanım için ücretsiz olduğu belirtildi, ancak ana sayfanızda bunu doğrulayan hiçbir bilgi bulamadım. Hala doğru mu? Üyeliğinizi açıkladığınız için teşekkür ederiz.
Philipp Claßen

2
UndoDB'in Başlangıç ​​ve Profesyonel sürümleri için fiyatlar nelerdir? Onları UndoDB sürümleri sayfasında göremiyorum.
tcrosley

3
Siz çocuklar Mozilla'yla nasıl karşılaştırıyorsunuz rr?
Ciro Santilli,

10

Teknoloji seçeneklerine ve ürünlerine genel bir bakış için, yaklaşık bir yıl önce yazdığım bir dizi blog gönderisine bakın (ve o zamandan beri bazı takipler):

Neden bu kadar az kullanıldığına dair hislerim, özel bir donanım gerektirmesi veya özel bir hata ayıklayıcı kullanması veya sisteminizin doğru kurulması gerektiğidir. Maalesef çoğu insan hata ayıklama araçlarından maksimum değer elde etmek için zaman harcamaz.

Ve gdb'nin "ucuz varsayılanı" neredeyse kullanılamaz şekilde yavaştır ve en yaygın hedef sistemlerden başka her şey için oldukça az stabilite problemi vardır.


4

TotalView hata ayıklayıcısına yönelik satış mühendisi olarak deneyimlerime göre, insanlar var olduğunu biliyorlar ancak (kabul edilebilir ya da değil) yavaşlamadan bağımsız olarak işe yaradığını sanmıyorlar.

Cambridge Üniversitesi kısa bir süre önce "Küresel Ekonominin Tersine Hata Ayıklama Maliyetlerini Kabul Etmeme Yılında Milyar $ Milyar Dolar Olmaması" başlıklı bir anket yaptı .

Ve GDB'ye geri dönersek, yavaşlamanın bir "gerçek hayat" uygulamasında kullanılamaz hale getirdiğini duydum (çok).

Kişisel olarak "Merhaba dünya!" Dışındaki uygulamalarda ters hata ayıklama kullanarak daha fazla kişiden haber almayı çok isterdim.


4
Bence bu çalışma ile bağlantı kurarak spam 'Çalışmayı geri al' gibi görünen 'Yazılımı Geri Al' yerine daha iyi olacağını düşünüyorum.
Bulwersator

1
Eski işimde, tersine bir hata ayıklayıcı oluşturmaya çalıştım ( ghs.com/products/timemachine.html ). Hata ayıklayıcısını dahili olarak çok kullandık ve size söyleyebilirim, inanılmazdı. Tabii ki, gerçekten kıllı yarış koşullarında harikaydı, ama bundan daha fazlasıydı. Ters hata ayıklama her zaman açık olduğunda, hata ayıklama konusundaki zihniyetiniz değişir. Daha az yinelenirsiniz ve kodunuzu nasıl test ettiğinize daha az dikkat edebilirsiniz. Ayrıca bir çalıştırma çalıştırmasını kaydedebilir ve bir başkasına gönderebilirsiniz, bu nedenle diğer kişilerin kodunda hata bulmak için harikadır.
hız uçağı

2

Ben bu "ters" veya "tarihi" hata ayıklama biraz daha genişletmek önemli olduğunu düşünüyorum. Bunların karmaşık sistemlerini ve davranışlarını anladığımı, devleti açık kılan "olayları" tekrarlamanın kesinlikle önemli olduğunu düşünüyorum.

Söylemek istediğim, bu tekniğin neden bugün bu kadar çok uygulanmadığını veya ilgili sorunların nadiren açıkça tartışıldığını merak etme konusunda yalnız olmadığınızdır.

Öyleyse burada çok önemli iki kavramı vurgulayalım:

1. Bir programlama sistemini anlamak, durumun açık hale getirilmesinde yardımcı olacaktır.

2. Durum dizilerini tekrar eden bir programlama sistemini daha da anlamak (olayların) çok yardımcı olabilir.

İşte problemi çözen ve problem için çözümler önermiş veya tasarlamış bazı kaynaklar (karmaşık sistemlerde durumla ilgili):

Katran biti, kağıt: http://shaffner.us/cs/papers/tarpit.pdf Ana fikirler: sakınmak, izole etmek veya açık hale getirmek

-CQRS http://www.cqrs.nu/ Bu iki kavramın birleşimidir: Komut Sorgu Ayrıştırma ve Olay Kaynağı. Farklı uygulamalar var (Java, C #, Scala). Tate dizilerinin tekrarı ve bir alan modelinin gelişimi, buradaki en önemli kısımlardır.

Eğer varsa gerçekten uzaklaştırmak ve çok geniş resim halihazırda görebilirsiniz devlet açık hale getirir, çünkü zaten ((me) bilinçli) fp çekti fonksiyonel programlama insanların "yükselmeye"! Ancak bu sadece birinci nokta ile ilgilenir, ikincisine hitap etmek için, işlevsel olarak reaktif programlama olarak "gevşekçe" tanımlanabilecek başka bir konsepte ihtiyacınız vardır.

Öyleyse her şey yolunda ve iyi diyebilirsin ama gerçekte CQRS ve FRP'yi kim kullanıyor? Söyleyeceğim (IMO, çünkü somut numaralarım yok) aslında bir çok şirket, yaptıkları işin bu terminolojiye sahip olduğunu bilmiyor. Belki biraz google ve CQRS kullanan işletmelerden haber alırsınız, zaten orada bazı başarı hikayeleri var. FRP de Netflix'e verebileceğim bir örnek olarak yavaş yavaş yükseliyor: http://techblog.netflix.com/2013/02/rxjava-netflix-api.html Aslında sadece .NET tabanlı bir RX uygulaması yayınladı (ancak bir Javascript uygulaması da var). Böylece insanlar bugün bu teknikleri zaten kullanıyorlar, karmaşık sistemleri anlamak ve daha da iyi hale getirmek için büyük. Bu nedenle ters hata ayıklama teknikleri kullanıyorlar.

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.