Eclipse'de hata ayıklarken dönmeden önce dönüş değerini bulabilir miyim?


99

Bir yöntemin dönüş değerini satır çalıştırıldıktan sonra ve komut işaretçisi çağıran işleve dönmeden önce görmek mümkün müdür?

Kodda hata ayıklama yapıyorum Değiştiremiyorum (okuyun: bir üçüncü taraf kitaplığını yeniden derlemek istemiyorum) ve bazen kaynağım olmayan koda atlıyor veya dönüş ifadesinin beni durduran yan etkileri var ifadeyi sadece Ekran sekmesinde çalıştırabilir .

Genellikle dönüş değeri bir bileşik ifadede kullanılır ve bu nedenle Değişkenler görünümü bana değeri asla göstermez (bu nedenle kontrol, çağıran işleve dönmeden önce sonucu görmek ister).

GÜNCELLEME: İfadede yan etkiler olduğundan ifade görüntüleyiciyi kullanamıyorum.


7
Bu yüzden IntelliJ'in Topluluk Sürümüne geçtim - Eclipse çalışanları bunun ne kadar önemli olduğunu anlamıyor gibi görünüyor. (Eğer düzeltirlerse, piyasaya sürüldüğü güne geri döneceğim.)

@James Mitchell bu bir eklenti için harika bir fikir gibi görünüyor. Bunu yapılacaklar listesine ekleyeceğim ve zaman bulduğumda yapmaya çalışacağım (yakında değil)
IAdapter

@ user672348 Ama bunu IntelliJ IDEA'da nasıl yapabilirim?
Alexey Tigarev

@AlexeyTigarev: IIRC, sadece "Adım İadesi" (veya eşdeğeri) yaptığınızda görüntülenir.
Blaisorblade

1
Eclipse Oxygen (2017 ortası çıkış tarihi) için kendinizi hazırlayın. M2 kilometre taşı bu özelliği içerir .
Abdull

Yanıtlar:


36

Bu özellik Eclipse 4.7 M2 sürümüne Eclipse bug 40912 altında eklenmiştir .

Kullanmak için:

  • returnifadenin üzerine gelin ("Adım Adım" veya "Adım Geri Dön" kullanarak)
  • şimdi değişken görünümündeki ilk satır, "[ifade xxx] döndürüldüğü gibi" return ifadesinin sonucunu gösterecektir:

Detaylar için Eclipse Project Oxygen (4.7) M2 - Yeni ve Dikkate Değer bölümüne bakınız.


Ben de. Eclipse'i kullanırken bu özelliği özlüyorum.
m24p

1
Bu Eclipse hatası daha sonra 2009'un sonlarında yeniden açıldı . Yine de, atanmış kimse ve Hedef Aşama Noktası olmadan bir düzeltmeyi bekliyorum. :)
Mark A. Fitzgerald

1
Bu sorun, Eclipse 4.7'nin (M2 sonrası)
AbdullahC

1
Düzeltmenin nasıl kullanılacağına ilişkin bazı bilgiler 4.7 M2 için Yeni ve Dikkate Değer'de bulunabilir. Burada "Adım işlemlerinden sonra yöntem sonucunu" arayın: eclipse.org/eclipse/news/4.7/M2
Joshua Goldberg

@JoshuaGoldberg: Bunu belirttiğiniz için teşekkürler - cevabı düzenledim.
sleske

34

Bunun için gerçekten iyi bir kısayol buldum. Değeri döndüren ifadeyi seçin ve

Ctrl + Shift + D

Bu, return ifadesinin değerini gösterecektir. Bu, yalnızca hata ayıklama amacıyla değiştiremeyeceğiniz veya değiştirmek istemediğiniz durumlarda gerçekten yararlıdır.

Bu yardımcı olur umarım.

Not: Bunu üçüncü taraf kitaplıklarla test etmedim, ancak kodum için iyi çalışıyor. Bunu, Web Geliştiricileri için Eclipse Java EE IDE üzerinde test etti . Sürüm: Juno Service Release 1


4
+1 çünkü bu yalnızca dönüş değerleri için değil, genel olarak ifadeler için de çalışır. İfadeler sekmesini kullanmaktan çok daha uygun. Bunun kodu çalıştırdığına dikkat edilmelidir, bu nedenle yan etkileri varsa dikkatli olun. help.eclipse.org/indigo/…
keçi

1
Ctrl + Shift + Ibenim için de yardımcı oldu.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

2
@goat'ın da bahsettiği gibi, bu, kodu birden çok kez çalıştırır, bu nedenle örneğin işlev bunu yaptıysa return System.currentTimeMillis();, o zaman işlevin gerçekte döndürülmesinden farklı bir sonuç alırsınız!
Brad Parks

Eşdeğeri bir Apple machine?
Adrien Be

Bu sorunlu bir tavsiyedir - bu, ifadeyi yeniden değerlendirecektir ve yan etkileri varsa feci olabilir.
sleske


5

Bu yüzden yöntemler için her zaman aşağıdaki kalıbı izlerim:

MyReturnedType foo() {
     MyReturnedType   result = null;

     // do your stuff, modify the result or not

     return result;
}

Benim kurallarım:

  1. Yalnızca yöntemin sonunda yalnızca bir dönüş ifadesi (sonunda ondan sonra izin verilir)
  2. Her zaman varsayılan değerden başlayarak döndürülen değeri tutan yerel olarak adlandırılan bir sonuca sahip olun.

Doğal olarak, en önemsiz alıcılar muaftır.


3
Hey zvikico - kendi kodum üzerinde çalışırken, genellikle benzer bir kalıp kullanırım. Ne yazık ki benim sorunum, tarafımdan yazılmayan veya değiştirilemeyen bir kod kullandığım zamandır. : S
RodeoClown

Bunu ben de yapıyorum, ancak SonarLint şikayet ediyor .... şimdi
şüpheliyim

@WitoldKaczurba bu senin fikrin ve sorun değil. Sadece başka görüşler olduğunu kabul edin ve bunu yapanlara biraz saygı gösterin.
zvikico

Merhaba zvikco. Mesajınız için teşekkürler. Farklı yaklaşımlar olduğunu kabul ediyorum ancak pmd.sourceforge.io/pmd-4.3.0/rules/… 'e atıfta bulundum . Şerefe
Witold Kaczurba

2

Ben de bu sorunun cevabını öğrenmek istiyorum.

Geçmişte, böyle bir 3. parti kitaplığı ile uğraşırken, yaptığım şey, ebeveyn sınıfa delege eden ve hata ayıklamamı sarmalayıcı / alt sınıfta yapan bir sarmalayıcı sınıf veya alt sınıf oluşturmaktı. Yine de fazladan iş gerektirir.


1
Bu çözümle ilgili sorun (ekstra çalışma hakkında not ettiğinizin dışında), yalnızca harici bir kitaplığın derinliklerinde birden fazla sınıf / yöntem değilseniz işe yaramasıdır. Ancak, yöntemlerin dış katmanıyla uğraşırken kullanışlıdır.
RodeoClown


0

Çetin ceviz. Eclipse dışındaki deneyimlerime göre, dönüş değerini görmeniz gerekiyorsa, en iyisi bunu işlevdeki yerel bir değişkene atamaktır, böylece return ifadesi basittir return varname;ve değildir return(some * expression || other);. Ancak, kodu değiştiremeyeceğinizi (veya istemediğinizi) ve hatta yeniden derleyemeyeceğinizi söylediğiniz için bu size çok da yardımcı olmaz. Dolayısıyla, sizin için iyi bir cevabım yok - belki de ihtiyacınızı yeniden gözden geçirmeniz gerekiyor.


Kodumda genellikle ara adıma sahibim, böylece sonucu kontrol edebilirim, ancak kullandığım kodun bir kısmının değiştirmek için çok fazla organizasyon ek yükü var (özellikle kütüphane güncellenirse, çatallı bir sürümü sürdürmek istemiyorum sadece hata ayıklama için).
RodeoClown

0

Return ifadesine bağlı olarak, döndürülen ifadeyi vurgulayabilirsiniz ve sağ tıklama menüsünden "ifadeyi değerlendir" gibi bir şey olmalıdır (şu anda önümde tutulma yok, ama bunun gibi bir şey ). Size neyin iade edileceğini gösterecek.


4
Sorun, dönüş özelliğinin değerlendirilmesinin yan etkileri olduğunda (örneğin, oluşturulan veritabanı girişleri gibi), dönüş ifadesinin değerlendirilmesi sistem durumunu değiştireceğidir. Yine de öneri için teşekkürler.
RodeoClown

0

Bu biraz abartılı ama basit bir yol gibi görünmüyor:

JAR'ı ilgilendiğiniz yöntemlerin dönüş değerini elde eden yönlerle ölçmek için AspectJ'yi kullanabilirsiniz. Eclipse'in belgelerine göre, AspectJ programları diğer programlar gibi hata ayıklanabilir .

Kitaplığı yeniden derlemeden sınıflarınızı örmek için iki seçenek vardır:

  • İkili JAR'ın işlenmesi kabul edilebilir ise derleme sonrası dokuma;

  • Sanal makinede bir dokuma ajanının etkinleştirilmesini gerektiren yükleme süresi dokuma.

Tutulma belgelerine (yukarıdaki bağlantı) ve ayrıca AspectJ Geliştirme Ortamı Kılavuzu'na bakın .

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.