Eclipse에서 디버깅하는 동안 반환하기 전에 반환 값을 찾을 수 있습니까?


99

행이 실행 된 후 명령 포인터가 호출 함수로 돌아 가기 전에 메서드의 반환 값을 볼 수 있습니까?

수정할 수없는 코드를 디버깅하고 있습니다 (read : do n't want to re-compile a third party library) , 때로는 소스가없는 코드로 점프하거나 반환 표현식에 나를 방해하는 부작용이 있습니다. 표시 탭 에서 표현식을 실행할 수 있습니다.

종종 반환 값은 복합 명령문에서 사용되므로 변수 보기에는 값이 표시되지 않습니다 (따라서 제어가 호출 함수로 반환되기 전에 결과를보고 싶음).

업데이트 : 문에 부작용이 있기 때문에 식 뷰어를 사용할 수 없습니다.


7
이것이 제가 IntelliJ의 커뮤니티 버전으로 전환 한 이유입니다. Eclipse 사람들은 이것이 얼마나 중요한지 이해하지 못하는 것 같습니다. (그들도 고칠 경우에, 나는 출시있어 하루를 전환 할 수 있습니다.)

@James Mitchell 이것은 플러그인에 대한 훌륭한 아이디어처럼 보입니다. 할 일 목록에 추가하고 시간이되면 시도해 보겠습니다 (곧)
IAdapter 2011-12-05

@ user672348하지만 IntelliJ IDEA에서 어떻게할까요?
Alexey Tigarev 2013 년

@AlexeyTigarev : IIRC, "Step Return"(또는 이에 상응하는 것)을 수행 할 때 표시됩니다.
Blaisorblade 2014

1
Eclipse Oxygen (2017 년 중반 출시일)에 대비하세요. M2 마일스톤에는이 기능이 포함됩니다 .
Abdull

답변:


36

이 기능은 Eclipse bug 40912 에서 Eclipse 버전 4.7 M2에 추가되었습니다 .

그것을 사용하려면 :

  • return문을 건너 뜁니다 ( "Step Over"또는 "Step Return"사용).
  • 이제 변수보기의 첫 번째 줄에 "[statement xxx] returned :"와 같이 return 문의 결과가 표시됩니다.

자세한 내용은 Eclipse Project Oxygen (4.7) M2-신규 및 주목할만한 항목 을 참조하세요.


나도. Eclipse를 사용할 때이 기능이 그립습니다.
m24p 2014 년

1
이 Eclipse 버그는 이후 2009 년 말에 다시 열렸습니다 . 그러나 할당 된 사람과 목표 마일스톤이없는 상태에서 여전히 수정을 기다리고 있습니다. :)
Mark A. Fitzgerald

1
이는 최근에 수정 된 이클립스 4.7 (이후 M2) 빌드
AbdullahC

1
수정 사항을 사용하는 방법에 대한 일부 정보는 4.7 M2의 New And Noteworthy에서 찾을 수 있습니다. 여기에 "단계 작업 후 방법 결과"찾기 : eclipse.org/eclipse/news/4.7/M2
여호수아 골드버그

@JoshuaGoldberg : 이것을 지적 해주셔서 감사합니다-나는 그것을 대답으로 편집했습니다.
sleske

34

이것에 대한 정말 좋은 지름길을 찾았습니다. 값을 반환하는 표현식을 선택하고

Ctrl + Shift + D

이것은 return 문의 값을 표시합니다. 이것은 디버깅 목적으로 변경할 수 없거나 변경하고 싶지 않은 경우에 매우 유용합니다.

도움이 되었기를 바랍니다.

참고 : 타사 라이브러리에서 이것을 테스트하지는 않았지만 내 코드에서 제대로 작동합니다. 웹 개발자 용 Eclipse Java EE IDE에서 이를 테스트했습니다 . 버전 : Juno 서비스 릴리스 1


4
+1은 반환 값뿐만 아니라 일반적인 표현식에서도 작동하기 때문입니다. 표현식 탭을 사용하는 것보다 훨씬 편리합니다. 이것은 코드를 실행하므로 부작용이있는 경우주의해야합니다. help.eclipse.org/indigo/...
염소

1
Ctrl + Shift + I저에게도 도움이되었습니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

2
@goat가 언급했듯이 이것은 코드를 여러 번 실행하므로 예를 들어 함수가 이것을 수행 return System.currentTimeMillis();하면 실제로 반환 된 함수와 다른 결과를 얻을 수 있습니다!
Brad Parks

에 동등 Apple machine합니까?
Adrien Be

이것은 문제가되는 조언입니다. 이것은 표현을 재평가 할 것이며 부작용이있을 경우 재앙이 될 수 있습니다.
sleske


5

이것이 제가 항상 다음과 같은 방법 패턴을 고수하는 이유입니다.

MyReturnedType foo() {
     MyReturnedType   result = null;

     // do your stuff, modify the result or not

     return result;
}

내 규칙:

  1. 메서드의 끝에 만 반환 문이 하나만 있습니다 (다음에 마지막으로 허용됨).
  2. 항상 기본값부터 시작하여 반환 된 값을 보유하는 로컬 호출 결과가 있습니다.

당연히 가장 사소한 게터는 면제됩니다.


3
Hey zvikico-내 코드로 작업 할 때 보통 비슷한 패턴을 사용합니다. 불행히도 내 문제는 내가 작성하거나 수정할 수없는 코드를 사용할 때입니다. : S
RodeoClown

나도 이렇게하지만 SonarLint가 불평하고 있습니다 .... 이제 나는 모호합니다. stackoverflow.com/questions/31733811/…
HDave

@WitoldKaczurba 그게 당신의 의견이고 괜찮습니다. 다른 의견이 있다는 것을 받아들이고 그렇게하는 사람들에게 약간의 존경심을 나타내십시오.
zvikico

안녕하세요 zvikco. 메시지 주셔서 감사합니다. 다른 접근 방식이 있다는 것을 인정하지만 pmd.sourceforge.io/pmd-4.3.0/rules/…를 참조했습니다 . 건배
Witold Kaczurba

2

이 질문에 대한 답도 궁금합니다.

과거에는 이와 같은 타사 라이브러리를 다룰 때 부모 클래스에 위임하는 래퍼 클래스 또는 자식 클래스를 만들고 래퍼 / 자식 클래스에서 디버깅을 수행했습니다. 그래도 추가 작업이 필요합니다.


1
이 솔루션의 문제점은 (추가 작업에 대해 언급 한 것과는 별개로) 외부 라이브러리 내부에 여러 클래스 / 메소드가없는 경우에만 작동한다는 것입니다. 그러나 메서드의 외부 계층을 다룰 때 유용합니다.
RodeoClown


0

어려운 것. 내 경험, 이클립스의 외부, 당신은 반환 값을 참조해야하는 경우가 return 문이 간단하도록 기능에서 지역 변수에 할당하는 것이 좋습니다 것입니다 return varname;하지 return(some * expression || other);. 그러나 코드를 수정할 수 없거나 심지어 재 컴파일 할 수 없다고 말했기 때문에 이는 끔찍하게 도움이되지 않습니다. 그래서 나는 당신에게 좋은 대답을 가지고 있지 않습니다. 아마도 당신은 당신의 요구 사항을 재고해야 할 것입니다.


내 코드에는 일반적으로 중간 단계가 있으므로 결과를 확인할 수 있지만 사용중인 코드 중 일부는 수정할 조직 오버 헤드가 너무 많습니다 (특히 라이브러리가 업데이트되면 분기 된 버전을 유지하고 싶지 않습니다.) 디버깅 용).
RodeoClown

0

return 문에 따라 반환되는 표현식을 강조 표시 할 수 있으며 오른쪽 클릭 메뉴에서 "evaluate expression"과 같은 항목이 있어야합니다 (지금은 내 앞에 이클립스가 없지만 그런 식입니다. ). 반환 될 내용이 표시됩니다.


4
문제는 반환 기능을 평가할 때 부작용 (예 : 데이터베이스 항목이 생성되는 등)이있을 때 반환 표현식을 평가하면 시스템 상태가 변경된다는 것입니다. 그래도 제안 해 주셔서 감사합니다.
RodeoClown

0

이것은 약간 어리석은 일이지만 간단한 방법은없는 것 같습니다.

AspectJ를 사용하여 관심있는 메소드의 반환 값을 확보하는 측면으로 JAR을 계측 할 수 있습니다. Eclipse의 문서에 따르면 AspectJ 프로그램은 다른 프로그램처럼 디버깅 할 수 있습니다 .

라이브러리를 다시 컴파일하지 않고 클래스를 짜는 두 가지 옵션이 있습니다.

  • 바이너리 JAR 처리가 허용되는 경우 컴파일 후 위빙;

  • VM에서 위빙 에이전트를 활성화해야하는로드 시간 위빙.

Eclipse 문서 (위 링크) 및 AspectJ Development Environment Guide를 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.