Eclipse hata ayıklayıcıda nasıl geri adım atılır?


129

Eclipse hata ayıklayıcıda ters yürütme yapmak mümkün müdür? Üzerinde çalıştığım mevcut proje, herhangi bir şey yapılmadan önce bir dosyadaki verileri okumak ve başlatmak için en az 5 saniye gerektiriyor. Hata ayıklayıcıyı aşarsam, programı sonlandırmam ve yeniden başlatmam gerekir ve bu biraz zaman alır.

Yanıtlar:


136

Eclipse'in kareye düşmesini kullanabilirsinizGeçerli yöntemi üstten tekrar girmek için komutunu kullanabilirsiniz. Ancak gerçekleşen herhangi bir durum değişikliğini göstermez, bu nedenle içinde bulunduğunuz yönteme bağlı olarak çalışmayabilir.

Zamanda geri adım atmanıza izin veren gerçekten harika bir araç da Omniscient Debugger'dır . Sınıf yükleyiciye yüklenirken sınıfları eğiterek çalışır, böylece kodunuzun yaptığı her şeyi kaydedebilir. "Bu alana ne zaman, nerede ve neden mevcut değeri atandı?" Gibi çok güzel şeyler yapabilir. Kullanıcı arabirimi oldukça hantaldır ve büyük kod tabanlarını idare etmekte zorlanabilir, ancak bazı durumlarda gerçekten çok zaman kazandırabilir.

Güncelleme : Chronon , ODB ile birçok aynı şeyi yapıyor gibi görünen "Java için DVR" olarak tanımladığı ticari bir ürün sağlar.


@Matt McHenry ODB1.5 kullanmaya çalışıyordum; bağımsız bir java programıyla ancak onu nasıl çalıştıracağımdan emin değilim? Tek başına ve Eclipse ile çalışmasını sağlamak için gereken adımları açıklayan ODB sitesi dışında herhangi bir kaynağınız var mı?
Ayusman

@Ayusman: hayır, özür dilerim, ODB sitesindekinin ötesinde paylaşacak hiçbir şeyim yok. Diğer şeylerin yanı sıra daha yeni .class dosya biçimleriyle çalışmazsa şaşırmam. :(
Matt McHenry

İlginç cevap!
KrishPrabakar

Omnscient Hata Ayıklayıcı web sitesinin alan adı doldurulmuş olduğu görülüyor.
Thorbjørn Ravn Andersen

45

Daha önceki yanıtlarda bahsedilenlerin ötesinde - yani Eclipse'in hata ayıklama görünümündeki kareye düşür özelliği , yığın çerçevesinde daha önce hata ayıklamayı yeniden başlatır (ancak genel / statik verileri geri almaz) ve biraz ham ve çok fazla olmayan Omniscient hata ayıklayıcı gelişen - (çalışma) zamanında "geri dönmek" için kullanılabilecek birkaç Eclipse tabanlı araç vardır:

JIVE, Eclipse Java hata ayıklayıcısını program durumlarını kaydetme yeteneği ile genişletir. JIVE perspektifi, program çalışırken güncellenen bazı yararlı UML diyagramları sağlar. Bu diyagramlar, uygulamanın durumuna (nesne diyagramı) ve yığın izlemesine (sıra diyagramı) genel bir bakış sağlar. Hafızaya alınan izi sorgulayabilir ve zamanda ileri geri gidebilir ve ilgili diyagramları görebilirsiniz.

Diver yalnızca yöntem çağrılarını kaydeder ve JIVE gibi program durumlarını gerçekten kaydetmez. Her yöntem çağrısı olayı daha sonra erişim ve analiz için saklanır. Java Çalıştırma ve Hata Ayıklama konfigürasyonlarını esas olarak filtreleri belirlemek için genişletir. İzleme, çalışma zamanında duraklatılabilir / devam ettirilebilir / filtrelenebilir. Diver perspektifi, kaydedildikten sonra onu etkileşimli bir sıralama diyagramında görüntüleyebilir.

JIVE ve Diver, akademik araştırmalardan yayınlanan açık kaynaklı projelerdir. Kasım 2012 itibariyle her iki proje de aktiftir.

Chronon ticari bir üründür, ancak öğrenciler ve açık kaynaklı projeler için ücretsiz lisansları vardır. Web sitelerinde iddia edilenlere göre muhtemelen en kapsamlı kayıt cihazıdır, çünkü kaydedilen geçmişi tekrar oynatabilir, ileri geri adım atabilir ve zaman yolculuğu hata ayıklama dedikleri gibi izin verebilir. Ayrıca kayıt için Eclipse gerekmez.

Bu eklentilerin tümü kaynaklarda oldukça açgözlüdür, bu nedenle iyi bir özellik makinesine sahip olmak ve filtre özelliklerini kullanmak en iyisidir. Bunları başarılı bir şekilde çalıştırmak için kesin bir gereksinim , eclipse.ini dosyasındaki yığın alanını genişletmektir .

Benim durumumda, bir XML ayrıştırma programında hata ayıklamak için JIVE ve Diver'ı kullanmayı denedim, ancak kaynak yetersizliğinden her zaman donma tutulmasıyla sonuçlandı. Dalgıç , linux 64bit üzerinde çalıştırmak zor olabilir , ubuntu 32bit ve muhtemelen bu ipuçlarını kullanan diğer 32bit dağıtımlarda çalışır . Diver Windows üzerinde çalışır, daha iyisi Windows 64bit + 64bit JVM'de çalışır, aksi takdirde 32bit pencerelerde maksimum 1.3-1.6Gb yığın alanı ile sınırlandırılırsınız . JIVE, linux 64bit'imde harika çalışıyor ve diğer platformlarda da iyi çalışıyor gibi görünüyor.


Dalgıç üretime son verildi
Merours

12

Evet , Eclipse CDT, tarihsel hata ayıklayıcı özelliğini destekler.

Hata Ayıklama Yapılandırmasını Aç -> Hata Ayıklayıcı -> Başlangıçta Tersine Hata Ayıklamayı Etkinleştir .

Geri adım atmak veya ileri gitmek için shift+F5veya düğmesine basabilirsiniz .shift+F6F5F6


1
Bu seçenek tüm Eclipse sürümlerinde mevcut mu? Herhangi bir yerde bulabilirsem çok korkuyorum.
EngineerBetter_DJ

1
Onun GDB özelliği sourceware.org/gdb/wiki/ReverseDebug bundan Eclipse desteklenen bu bugs.eclipse.org/bugs/show_bug.cgi?id=258284 istek. Sanırım cevabın 2009'dan beri evet olduğunu düşünüyorum.
Sergei

CDT'de erişilebilir.
Sergei

Ben bir Java geliştiricisiyim, bu yüzden CDT'nin bana pek bir faydası olmayacağını tahmin ediyorum?
EngineerBetter_DJ

@Sergei Bunu eski bir Springsource sürümüyle WIndows 7 SP1 altında yapıyorum. Tersine hata ayıklamayı etkinleştirmek için önce -> Hata Ayıklama Konfigürasyonları -> Ana olarak hata ayıklamanız gerekir. Sayfanın altında işlem başlatıcısı var. "Standart Oluşturma İşlemi Başlatıcısı Kullanılıyor" yazacak ve "Diğerini seç ..." için bir köprü olacaktır. Bunu tıklayın ve "Konfigürasyona özel ayarları kullan" seçeneğinin işaretli olduğundan emin olun, ardından "GDB (GSF) İşlem Başlatıcısı Oluştur" u seçin ve tamam'ı tıklayın. "GDB'yi (GSF) Kullanarak İşlem Başlatıcısı Oluştur" artık ana sekmenin altında görüntülenecek.
Sammy

5

Ben önyargılıyım ama Chronon tam olarak sizin aradığınız şeyi yapıyor.

Kareye Bırak, tam olarak geri adım atmıyor, çünkü yöntem öbek üzerinde herhangi bir şeyi değiştirmişse, geri alınmayacaktır.


1
Chronon bunu gerçek zamanlı olarak yapmanıza izin veriyor mu? Anladığım kadarıyla, önce kronon kullanarak bir seans kaydetmeniz gerekiyor ve sonra muhtemelen o seansa geri dönebilirsiniz. Bu uygulamayı yeniden başlatmak kadar iyi değil mi? Ya da belki bir şeyi kaçırıyorum ..
Raam

2
evet, önce uygulamanızı kaydetmeniz gerekir ve daha sonra kayıttan daha sonra istediğiniz zaman hata ayıklayabilirsiniz. Hatayı yeniden oluşturmak için tüm adımları tamamlamanız gerekmediğinden uygulamayı yeniden başlatmaktan farklıdır. Tek yapmanız gereken hatayı bir kez kaydetmek ve ardından yalnızca kaydı kullanarak hata ayıklamak istediğiniz zaman ona bakabilirsiniz. Kaydı oynatmak için orijinal ortamın herhangi bir parçasına ihtiyacınız yoktur.
pdeva

Chronon docker ortamında çalışıyor mu? Eclise'm yerelde değil ..
Choi

3

Ben de tutulmada bu özelliği arıyordum. Görsel stüdyonun bunu yapabileceğini biliyorum. Aslında mevcut satır işaretçisini sürükleyip kodun herhangi bir yerine geri bırakabilirsiniz. Değişkenlerdeki değişikliklerin geri alınabileceğinden pek emin değilim. Ama yine de çok kullanışlı ve çok zaman kazandırıyor. Bunu uzun süredir tutulmada bekliyordum.


1

Soru bir Eclipse dili belirtmiyor ve yanıtların çoğu Java'yı varsayıyor.

GDB hata ayıklayıcı ile C ++ ve GCC kullanıyorsanız, Eclipse, Run->Move to Lineişi yapan ve Visual Studio Set Next Deyimi gibi işlevlere sahiptir . Bu durumda Eclipse, GDB'deki özelliği kullanıyor.

Java kullanıyorsanız, Eclipse veya Netbeans ile bunun bir yolunu bilmiyorum, ancak diğer yanıtlar eklentiler önerdi. Eclipse, benim sürümümde (Juno SR1) Java için çalışan "kareye bırak" komutuna sahip. Hata ayıklama modunda bir işlev içindeki kodu değiştirir ve kaydedersem, yürütme satırı otomatik olarak geçerli işlevin üstüne taşınır ve oradan devam edebilirim. Çizgiyi belirtmekle aynı şey değil ama bu bir şey.

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.