2013-03-11 5 views
4

Java와 Groovy 코드가 혼합 된 코드베이스가 있습니다. 한 번에 (즉 println string입니다) strings.each()에서 실행되는 코드를 하나 개의 행을 밟아 IntelliJ IDEA를 사용하여 Groovy의 반복 (디버깅) 디버깅

String[] strings = ["First", "Second", "Third"] 
strings.each { string -> 
    println string 
} 

내가하게 IntelliJ IDEA이 디버깅

(11 절.) : 그루비 코드의 반복을 위해, 우리는 클로저를 사용하는 경향이 밟은 것입니다. println 행에 중단 점을 넣을 수 있으며 디버깅 할 수는 있지만 피해야하는 간단한 해결 방법입니다.

Groovy 클로저를 넘지 않도록 intelliJ를 구성하는 방법이 있습니까?파일 -> 설정 -> 디버거 -> Groovy에는 해당 옵션이 없습니다.

편집 :이 같은 자바 스타일의 반복

내가 가진 말 :

내가 IntelliJ에 뭘 기대하는 것을 명확히하기 위해

for (String string : strings) { 
    println string 
} 

내가 "이상 단계"사용하는 경우, 디버거는 문제없이 반복합니다. 계속 진행할 수 있고 반복 할 객체가 없을 때까지 계속 반복됩니다. 이것은 내가 위와 같은 종결을 기대할 것입니다.

수동으로 중단 점을 설정해야하는 하나 또는 두 개의 클로저가있는 경우 문제가되지 않을 수 있습니다. 그러나 많은 사람들이 있다면, 그들에게 "자동적으로"들어가는 것이 정말로 깔끔한 것입니다.

+0

'들어가기'를하고 있습니까? (F7 단축키) –

+0

@Nebelmann '내가 들어가면'나는 반복을 설정하는 Groovy 클래스의 전체 스택을 단계별로 따라 가야한다. 나는 결국 루프 내부에서 끝나지 만 여전히 거기에 도착하는 데에는 많은 어려움이 있습니다. – Magnilex

+1

나는 할 수있는 일이 없기를 두려워한다. 나는 이해한다. '각자'는 종결 자이다. 그래서 당신이 넘어서게되면 그것은 모든 기능을 건너 뛸 것이고, 들어가면 당신은 많은 것을 다뤄야 할 것이다 'Java'처럼 Spring bean 메소드 호출을하고 Proxies로 끝내고 싶을 때처럼 ... 노이즈 클로저에있는 첫 번째 줄에 중단 점을 설정하는 것이 내가 알고있는 유일한 해결책이다. ** 편집 ** : IntelliJ의'Debugger> Stepping' 옵션을 발견했습니다. Groovy의 내부 구조로 인해 어려움을 겪지 않게 할 수 있습니다. 시도해 볼 가치가 있습니다. –

답변

3

IntelliJ에서 더 나은 클로저 디버깅 지원이 필요하다는 것에 완전히 동의합니다. 당신이해야 할 일이 어떤 농구를 뛰어 넘지 않아야하는 것처럼 항상 쉽지는 않기 때문입니다.

찾을 수 있듯이 println 행에 중단 점을 넣을 수 있습니다.이 중단 점을 사용하면 일반적으로 클로저 (항상은 아님) 내에서 휴식을 취할 수 있습니다. 에 중단 점이있는이 있으면 IntelliJ는 아주 강력한 조건부 중단 점 시스템을 갖추고있어 중단 시간을 훨씬 효과적으로 제어 할 수 있습니다.

가끔씩 유용하다고 생각한 또 다른 경로는 클로저에서 코드를 직접 사용하는 대신 클로저에서 호출하는 메서드로 모든 것을 가져 와서 버리는 것입니다. 이렇게하면 런타임 동작이 너무 많이 변경되지 않으며,이를 통해 사물을 훨씬 잘 제어 할 수 있습니다. 또한 일반적으로 리팩터링을해야한다는 표시이기도합니다. 이미 코드를 파헤 치기에는 너무 고통 스럽기 때문입니다.

+0

아이디어를 주셔서 감사합니다. 도움이됩니다. "클로저 코드"를 메소드로 옮기더라도 실제로 여기서 도움이되지는 않습니다. 제가 정말로 원했던 것은 자바 루프를 밟는 것처럼 클로저로 들어가는 것입니다. – Magnilex

+0

동의합니다. 다행히 IntelliJ 개발자는이 게시물을 보게 될 것이며 앞으로 출시 될 버전에서이 기능을 우선 순위 기능으로 추가 할 것입니다. 나는 그들이 Stack Overflow를 보았다는 것을 알고 있으며, 나는이 문제를 다른 사람들로 가득 채웠다. – cdeszaq

관련 문제