Czy mogę znaleźć zwracaną wartość przed powrotem podczas debugowania w Intellij?

127

Z:

Object method(){
    ...
    return /* some complex expression */
}

Czy istnieje sposób, aby zobaczyć, jaka wartość zostanie zwrócona podczas debugowania? Jak w jakiś sposób ustawić punkt przerwania, który zostałby trafiony zaraz po powrocie, ale zanim wykonanie przejdzie do kodu wywołującego? Chciałbym wiedzieć, jaka jest wartość zwracana, a także być w stanie zobaczyć, jakie są wartości wszystkich zmiennych lokalnych.

Sposób, w jaki to zrobić teraz jest poprzez zmienną tymczasową: Object ret = /* something complex */; return ret;. Ale to jest kłopotliwe, a także dodaje dodatkową niepotrzebną linię kodu.

Uwaga: to jest to samo pytanie, co czy mogę znaleźć wartość zwracaną przed zwróceniem podczas debugowania w programie Visual Studio , ale w przypadku intellij.

Kyle
źródło

Odpowiedzi:

31

Wydaje się, że można to zrobić na kilka sposobów. Pierwsza polega na ustawieniu punktu przerwania w sygnaturze metody, w twoim przypadku punkt przerwania należy ustawić w metodzie Object () {. Pozwoli ci to obserwować wejście i wyjście z metody. Uważam, że musisz tego używać w połączeniu z „ Watch wartości zwracanych przez metodę”, jak opisano powyżej, ale nie byłem w stanie tego całkowicie przetestować, ponieważ obliczenie zajmuje zbyt dużo czasu. Uważaj, to znacznie zmniejsza wydajność debugera i debugowanie zajmie więcej czasu.

Możesz również ręcznie wykonać następujące czynności.

  1. Skonfiguruj punkt przerwania w linii powrotu.
  2. Po trafieniu linii powrotu kliknij linię powrotu, a konkretnie umieść kursor na operacji, którą chcesz zobaczyć, a następnie przejdź do Run-> Evaluate Expression (lub Alt-F8) i powinno uruchomić wyrażenie w tym miejscu i zwrócić to, co zwraca.

Uwaga : Jeśli utworzysz punkt przerwania, jest wiele rzeczy, które możesz nakazać IDEA, aby z nimi zrobić, na przykład jeśli złamiesz punkt przerwania, możesz powiedzieć mu, aby wykonał wyrażenie i zarejestrował je. Możesz się rozejrzeć i zobaczyć, co możesz zrobić, klikając prawym przyciskiem myszy punkt przerwania i klikając właściwości.

AKTUALIZACJA : Spróbuj tego w połączeniu z pierwszym sposobem zrobienia tego. Nie używaj opcji „Obserwuj wartości zwracane przez metodę”, ponieważ wydaje się, że spowalnia lub wstrzymuje sesję debugowania. Zamiast tego wykonaj następujące czynności

  1. Kliknij prawym przyciskiem myszy wyrażenie zwracające, które chcesz zobaczyć, i kliknij „Dodaj do zegarków”
  2. Następnie dodaj punkt przerwania metody, jak podano powyżej.
  3. Debuguj swój program, a Twoja metoda zepsuje podpis metody.
  4. Naciśnij klawisz F9, aby kontynuować, a powinno się ono ponownie zepsuć PO obliczeniu wyrażenia zwracanego, a wyrażenie zwrotu powinno znajdować się w kolumnie obserwacyjnej.

Pamiętaj, że punkty przerwania metody są wolniejsze, więc może to zająć więcej czasu, trudnym sposobem na poprawę tego, jeśli zauważysz zbyt duży wpływ na wydajność, jest po prostu ustawienie punktu przerwania instrukcji return (bez punktu przerwania metody), a następnie dodanie punktu przerwania metody PO trafieniu punktu przerwania instrukcji return, a następnie kontynuowaniu.

Mam nadzieję że to pomoże,

jluzwick
źródło
1
Właściwie, po dodaniu punktu przerwania i obserwatora do (nowe X ()), możesz po prostu wykonać Alt + F8 na tym zegarku, aby „przeanalizować” zwrócony obiekt. To jest naprawdę przydatne.
Kedar Mhaswade
Jeśli dobrze to rozumiem, proponowane tutaj rozwiązanie działa tylko wtedy, gdy wyrażenie nie ma skutków ubocznych. Zdecydowanie nie polecam ogólnie umieszczania skomplikowanych wyrażeń w oknie zmiennych / okienku obserwacyjnym.
Mashmagar
Od co najmniej 2016.3 jest znacznie lepszy sposób. Szczegółowe informacje można znaleźć w odpowiedzi udzielonej przez firmę Birchlabs. Teraz powinna to być zaakceptowana odpowiedź.
Mikezx6r
150

W IntelliJ IDEA 2016.3: jest ukryty w przycisku koła zębatego panelu debugowania. Upewnij się, że Show Method Return Valuesjest zaznaczone .

IntelliJ IDEA 2016.3 „Pokaż wartości zwracane metody”

Użyj debugera, aby przerwać gdzieś wewnątrz funkcji, której wartość zwracana chcesz zobaczyć.

wkroczyć w funkcję

Wyjdź z funkcji (lub przejdź, aż uciekniesz):

wyjdź

Zwróć uwagę, że zwracana wartość pojawia się w Twoich zmiennych:

obserwuj zwracaną wartość

Birchlabs
źródło
3
@Stan Zaktualizowałem moją odpowiedź, aby podać działający przykład.
Birchlabs,
40

W panelu debugera dostępny jest przycisk Obserwuj wartości zwracane metody .

Obserwuj wartości zwracane metody : kliknij ten przycisk, aby obserwować zwracane wartości ostatnio wykonanej metody.

Watch zwraca wartości metody

Konfiguracja IDEA 12:

POMYSŁ 12

CrazyCoder
źródło
2
Wydaje się, że nic nie pojawia się na kartach „Zmienne” ani „Zegarki”. Używam Groovy, jeśli to ma znaczenie. Wydaje się również, że pokaże wartość zwracaną przez ostatnią metodę wykonaną z kontekstu kodu wywołującego, a nie z kontekstu samej metody. Ważna różnica polega na tym, że jeśli widzisz to z kontekstu samej metody, możesz również spojrzeć na wartości zmiennych lokalnych metody. To może pozwolić ci zobaczyć, co poszło nie tak, jeśli metoda zwraca nieprawidłową wartość.
Kyle
3
Pokazuje zwracaną wartość w okienku „Zmienne” (przy użyciu w pełni kwalifikowanej nazwy metody). To powinna być akceptowana odpowiedź. @CrazyCoder +1 ode mnie :-)
Omri Spector
4
@CrazyCoder: Czy ta funkcja nadal istnieje w IDEA 13? Nie mogę tego znaleźć.
kevinarpe
1
Jestem na Intellij 15 i też tego nie widzę. Czy możesz opublikować zrzut ekranu?
Sanjiv Jivan
3
w styczniu 2017 r. (Idea 2016.3.2): należy kliknąć ikonę Ustawienia (koło zębate, tuż nad żółtą pozycją menu na drugim obrazie), pojawi się menu zawierające „Pokaż wartości zwracane metody”. Nie ma potrzeby, aby ponownie uruchomić cokolwiek: po kolejnym powrocie z metody jego ObjectClassName.methodName () pojawia się w zmiennych zobaczyć tuż poniżej tego .
18446744073709551615
1

Pytano o to jakiś czas temu, ale używam innej metody, gdy chcę poradzić sobie z tą sytuacją.

Podczas debugowania możesz zaznaczyć wyrażenie (w twoim przypadku wyrażenie tuż po „return”) i nacisnąć CTRL + ALT + F8 (Quick Evaluate Expression). IntelliJ wyświetli małe okienko pokazujące wartość, która zostanie zwrócona.

unlimitednzt
źródło
2
Jeśli używasz układu graficznego Intela, ten skrót klawiaturowy wyłączy dodatkowe monitory .
Coli
1
Użytkownicy Linuksa: Ctrl + Alt + F8 - wyśle ​​użytkownika do drugiego terminala GUI. W Ubuntu nacisnąłem Ctrl + Alt + F2, aby wrócić.
Dmitriy Pavlukhin