Eclipse 디버거에서 되돌아가는 방법?


129

Eclipse 디버거에서 역 실행을 수행 할 수 있습니까? 내가 현재 작업중 인 프로젝트는 무엇이든 할 수 있기 전에 파일에서 데이터를 읽고 초기화하는 데 최소 5 초가 필요합니다. 디버거를 넘어 서면 프로그램을 종료하고 다시 시작해야하는데 시간이 약간 걸립니다.

답변:


136

Eclipse의 drop to frame 명령을 사용하여 현재 메소드를 맨 처음부터 다시 입력 할 수 있습니다 . 그러나 발생한 상태 변경 사항을 풀지 않으므로 사용하는 방법의 종류에 따라 작동하지 않을 수 있습니다.

실제로 시간을 거슬러 올라갈 수있는 또 다른 멋진 도구는 Omniscient Debugger 입니다. 클래스 로더에로드 된 클래스를 계측하여 작동하므로 코드가 수행하는 모든 것을 기록 할 수 있습니다. "이 필드에 현재 값이 언제, 어디서, 왜 할당 되었습니까?"라는 대답과 같은 매우 멋진 작업을 수행 할 수 있습니다. UI는 다소 번거롭고 큰 코드 기반을 처리하는 데 어려움을 겪을 수 있지만 경우에 따라 많은 시간을 절약 할 수 있습니다.

업데이트 : Chronon 은 "DVR for Java"라고 설명하는 상용 제품을 제공하며 ODB와 동일한 기능을 수행합니다.


@Matt McHenry ODB1.5를 사용하려고했습니다. 독립형 Java 프로그램을 사용하지만 작동시키는 방법을 모르겠습니다. 독립형 및 Eclipse에서 작동하도록하는 단계를 설명하는 ODB 사이트 이외의 자원이 있습니까?
Ayusman

@Ayusman : 아니요, 죄송합니다. ODB 사이트에있는 것 이상으로 공유 할 것이 없습니다. 새로운 .class 파일 형식으로 작동하지 않더라도 놀라지 않을 것입니다. :(
Matt McHenry

재미있는 답변!
KrishPrabakar

Omnscient Debugger 웹 사이트가 도메인 스쿼트 된 것으로 나타납니다.
Thorbjørn Ravn Andersen

45

이전 답변에서 언급 된 것 외에도- 디버그 뷰 의 Eclipse 드롭 투 프레임 기능- 스택 프레임에서 초기에 디버깅을 다시 시작하지만 전역 / 정적 데이터를 되 돌리지는 않지만 Omniscient 디버거 는 약간 원시적이지 않습니다. 진화-(실행) 시간에 "돌아가는"데 사용할 수있는 몇 가지 Eclipse 기반 도구가 있습니다.

JIVE는 프로그램 상태를 기록하는 기능으로 Eclipse Java 디버거를 확장합니다. JIVE Perspective는 프로그램이 실행되는 동안 업데이트되는 유용한 UML 다이어그램을 제공합니다. 이 다이어그램은 애플리케이션 상태 (오브젝트 다이어그램) 및 스택 추적 (시퀀스 다이어그램)에 대한 개요를 제공합니다. 기억 된 추적을 조회하고 시간을 앞뒤로 이동하여 해당 다이어그램을 볼 수 있습니다.

다이버는 메소드 호출 만 기록하고 실제로 JIVE와 같은 프로그램 상태는 기록하지 않습니다. 모든 메소드 호출 이벤트는 나중에 검색 및 분석하기 위해 저장됩니다. 주로 필터를 지정하기 위해 Java 실행 및 디버그 구성을 확장합니다. 런타임에 추적을 일시 중지 / 다시 시작 / 필터링 할 수 있습니다. 일단 기록되면 다이버 퍼스펙티브는 대화식 시퀀스 다이어그램으로이를 표시 할 수 있습니다.

JIVE와 다이버는 학술 연구에서 발행 한 오픈 소스 프로젝트입니다. 2012 년 11 월 현재 두 프로젝트가 모두 활성화되었습니다.

Chronon은 상용 제품이지만 학생 및 오픈 소스 프로젝트에 대한 무료 라이센스가 있습니다. 웹 사이트에서 주장하는 것에서 아마도 기록 된 기록을 재생할 수 있기 때문에 아마도 가장 포괄적 인 레코더 일 것입니다. 또한 Eclipse는 레코딩에 필요하지 않습니다.

이러한 플러그인은 모두 리소스가 매우 탐욕 스럽기 때문에 좋은 사양 기계를 사용하고 필터 기능을 사용하는 것이 가장 좋습니다. 그것들을 성공적으로 실행하기 위해서는 eclipse.ini에서 힙 공간확장해야합니다 .

필자의 경우 JIVE와 Diver를 사용하여 XML 파싱 프로그램을 디버깅하려고 시도했지만 항상 리소스 부족으로 인해 일식이 멈추었습니다. 다이버는 리눅스 64 비트 에서 실행하기 까다로울 수 있으며 , 이 팁을 사용하여 우분투 32 비트 및 다른 32 비트 배포판에서 작동합니다 . 다이버는 Windows에서 더 잘 작동하지만 Windows 64 비트 + 64 비트 JVM에서 더 잘 작동합니다. 그렇지 않으면 32 비트 창에서 최대 힙 공간이 1.3-1.6Gb 로 제한됩니다 . JIVE는 Linux 64 비트에서 잘 작동하며 다른 플랫폼에서도 잘 작동하는 것 같습니다.


다이버가 중단되었습니다
merours을

12

, Eclipse CDT는 히스토리 디버거 기능을 지원합니다.

열기 디버그 구성 -> 디버거 -> 시작시 역 디버깅을 활성화합니다 .

shift+F5또는 shift+F6을 눌러 뒤로 F5또는 뒤로 F6앞으로 이동할 수 있습니다 .


1
이 옵션이 모든 버전의 Eclipse에 존재합니까? 어디에서나 찾을 수 있다면 나는 곤경에 빠진다.
EngineerBetter_DJ

1
bugs.eclipse.org/bugs/show_bug.cgi?id=258284 요청에 의해 Eclipse에서 지원되는 GDB 기능 sourceware.org/gdb/wiki/ReverseDebug 나는 2009 년 이후로 대답이 '예'라고 생각합니다.
Sergei

CDT에서 액세스 할 수 있습니다.
Sergei

저는 Java 개발자이므로 CDT가 나에게별로 유용하지 않을 것이라고 생각합니다.
EngineerBetter_DJ

@ Sergei 이전 Springsource 버전의 WIndows 7 SP1 에서이 작업을 수행하고 있습니다. 리버스 디버깅을 사용하려면 먼저 as-> Debug Configurations-> Main을 디버깅해야합니다. 페이지 하단에는 프로세스 실행기가 있습니다. "Standard Create Process Launcher 사용"이라고 말하고 "다른 선택 ..."에 대한 하이퍼 링크가 있습니다. 이를 클릭하고 "구성 특정 설정 사용"이 선택되어 있는지 확인한 다음 "GDB (GSF) 프로세스 실행기 작성"을 선택하고 확인을 클릭하십시오. "GDB (GSF) Create Process Launcher 사용"이 기본 탭의 맨 아래에 표시됩니다.
Sammy

5

나는 편견이 있지만 Chronon 은 당신이 찾고있는 것을 정확하게합니다.

메소드가 힙의 항목을 변경 한 경우 되돌릴 수 없으므로 드롭 투 프레임이 정확하게 뒤로 물러나지 않습니다.


1
크로노는 실시간으로 그렇게 할 수 있습니까? 내 이해는 먼저 크로 논을 사용하여 세션을 기록해야하며 그 세션에서 물러날 수 있다는 것입니다. 응용 프로그램을 다시 시작하는 것만 큼 좋지 않습니까? 아니면 내가 뭔가를 잃어
버렸을지도 모른다

2
예, 먼저 응용 프로그램을 기록해야하며 나중에 기록 후 언제든지 디버깅 할 수 있습니다. 버그를 재현하기 위해 모든 단계를 거칠 필요가 없기 때문에 응용 프로그램을 다시 시작하는 것과 다릅니다. 버그를 한 번만 기록하면 기록 만 사용하여 디버그하려는 경우 언제든지 확인할 수 있습니다. 레코딩을 재생하기 위해 원래 환경의 일부가 필요하지 않습니다.
pdeva

Chronon은 도커 환경에서 작동합니까? 저의 eclise는 지역에 없습니다 ..
Choi

3

이클립스 에서도이 기능을 찾고있었습니다. 비주얼 스튜디오가 그렇게 할 수 있다는 것을 알고 있습니다. 실제로 현재 선 마커를 드래그하여 코드의 아무 곳이나 다시 놓을 수 있습니다. 변수 변경을 취소 할 수 있는지 잘 모르겠습니다. 그러나 여전히 매우 유용하며 많은 시간을 절약합니다. 나는 일식에서 이것을 오랫동안 오랫동안 기다려왔다.


1

이 질문은 Eclipse 언어를 지정하지 않으며 많은 답변이 Java를 가정합니다.

GDB 디버거와 함께 C ++ 및 GCC를 사용하는 경우 Eclipse는 Run->Move to LineVisual Studio Set Next Statement 와 같은 작업 및 기능을 수행합니다 . 이 경우 Eclipse는 GDB에있는 기능을 사용합니다.

Java를 사용하는 경우 Eclipse 또는 Netbeans를 사용하는 방법을 알지 못하지만 다른 답변에서는 플러그인을 제안했습니다. Eclipse에는 내 버전 (Juno SR1)에서 Java에 사용할 수있는 "프레임으로 드롭"명령이 있습니다. 디버그 모드에서 함수 내에서 코드를 수정하고 저장하면 실행 줄이 자동으로 현재 함수의 맨 위로 이동하여 계속 진행할 수 있습니다. 줄을 지정하는 것과 같지는 않지만 무언가입니다.

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