Czy można zobaczyć zwracaną wartość metody po uruchomieniu wiersza i zanim wskaźnik instrukcji powróci do funkcji wywołującej?
Debuguję kod, którego nie mogę zmodyfikować (czytaj: nie chcę ponownie kompilować biblioteki innej firmy) , a czasami przeskakuje do kodu, którego nie mam źródła lub wyrażenie powrotu ma efekty uboczne, które uniemożliwiają mi istnienie można po prostu uruchomić wyrażenie na karcie Wyświetl .
Często wartość zwracana jest używana w instrukcji złożonej, więc widok Zmienne nigdy nie pokaże mi wartości (stąd chcę zobaczyć wynik, zanim sterowanie powróci do funkcji wywołującej).
AKTUALIZACJA: Nie mogę użyć przeglądarki wyrażeń, ponieważ w instrukcji występują efekty uboczne.
java
eclipse
debugging
return-value
RodeoClown
źródło
źródło
Odpowiedzi:
Ta funkcja została dodana do Eclipse w wersji 4.7 M2 w ramach błędu Eclipse 40912 .
Aby z niego skorzystać:
return
instrukcję (używając „Step Over” lub „Step Return”)Szczegółowe informacje można znaleźć w Eclipse Project Oxygen (4.7) M2 - New and Noteworthy .
źródło
Znalazłem do tego naprawdę dobry skrót. Wybierz wyrażenie zwracające wartość i naciśnij
Spowoduje to wyświetlenie wartości instrukcji return. Jest to bardzo pomocne w przypadkach, gdy nie możesz lub nie chcesz zmieniać tylko w celu debugowania.
Mam nadzieję że to pomoże.
Uwaga: nie testowałem tego z bibliotekami innych firm, ale działa dobrze dla mojego kodu. Przetestowano to w środowisku Eclipse Java EE IDE dla programistów WWW. Wersja: Juno Service Release 1
źródło
Ctrl + Shift + I
był również pomocny dla mnie.return System.currentTimeMillis();
, otrzymasz inny wynik niż funkcja faktycznie zwrócona!Apple machine
?W rzeczywistości jest to długotrwały błąd w Eclipse, pochodzący z pierwszych dni IDE: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912
źródło
Dlatego zawsze trzymam się następującego schematu metod:
Moje zasady:
Oczywiście najbardziej trywialne gettery są zwolnione.
źródło
Ciekawi mnie również odpowiedź na to pytanie.
W przeszłości, gdy miałem do czynienia z biblioteką innej firmy, to, co robiłem, to tworzenie klasy opakowującej lub klasy podrzędnej, która jest delegowana do klasy nadrzędnej i przeprowadzałem debugowanie w klasie opakowującej / podrzędnej. Wymaga to jednak dodatkowej pracy.
źródło
„Teraz, kiedy wracasz z metody, w górnej metodzie, w widoku zmiennej pokazuje wartość zwracaną przez poprzednio zakończone wywołanie” [1]
[1] https://coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/
źródło
Trudny. Z mojego doświadczenia, poza Eclipse, wynika, że jeśli możesz potrzebować zobaczyć zwracaną wartość, najlepiej jest przypisać ją do zmiennej lokalnej w funkcji, aby instrukcja return była prosta,
return varname;
a niereturn(some * expression || other);
. Jednak nie jest to dla ciebie strasznie pomocne, ponieważ mówisz, że nie możesz (lub nie chcesz) modyfikować lub nawet ponownie kompilować kodu. Więc nie mam dla ciebie dobrej odpowiedzi - być może musisz ponownie rozważyć swoje wymagania.źródło
W zależności od instrukcji return możesz podświetlić zwracane wyrażenie iz menu po kliknięciu prawym przyciskiem myszy powinno być coś takiego jak "ocena wyrażenia" (nie mam teraz przed sobą zaćmienia, ale to coś takiego ). Pokaże ci, co zostanie zwrócone.
źródło
Jest to nieco naciągane, ale ponieważ nie wydaje się, aby istniał prosty sposób:
Możesz użyć AspectJ do oprzyrządowania JAR z aspektami, które przechwytują wartość zwracaną przez interesujące Cię metody. Zgodnie z dokumentacją Eclipse, programy AspectJ mogą być debugowane tak jak inne programy.
Istnieją dwie opcje splatania klas bez ponownej kompilacji biblioteki:
Tkanie po kompilacji, jeśli przetwarzanie binarnego pliku JAR jest dopuszczalne;
Tkanie w czasie ładowania, które wymaga aktywacji agenta tkactwa w maszynie wirtualnej.
Zobacz dokumentację eclipse (łącze powyżej), a także podręcznik środowiska programistycznego AspectJ .
źródło