Intellij 8 내에서 Java 디버거를 사용하고 있었는데 “drop frame”이라는 버튼이 나타났습니다. 이것이 어떤 용도로 사용되는지 아는 사람이 있습니까? 이것이 어떻게 / 왜 사용 / 유용합니까?
답변
애플리케이션의 호출 스택은 디버거에서 볼 수 있습니다. “드롭 프레임”기능을 사용하면 시간을 거슬러 올라가는 의미에서 이전 스택 프레임으로 “폴백”할 수 있습니다. 다시보고 싶은 중요한 지점을 놓친 경우 기능을 다시 입력하는 데 도움이 될 수 있습니다.
“스택 프레임”이라는 이름에서 알 수 있듯이 이미 전역 상태에 적용된 변경 사항 (예 : 정적 변수, 필드 값 변경 등)은 취소되지 않고 로컬 변수 만 재설정됩니다. 이로 인해 원래 중단 점으로 이어진 실행 경로와 다른 실행 경로가 발생할 수 있습니다. 이 점을 알고 있어야합니다. 응용 프로그램을 다시 시작하지 않고도 다른 실행 경로를 탐색하거나 현재 스택으로 이어지는 특정 긴 프로세스를 탐색하는 데 유용한 기능이라고 생각합니다. 디버거를 통해 사용할 수있는 변수 값의 변경과 결합하여 모든 종류의 흥미로운 작업을 수행 할 수 있습니다.
물론 발생한 부작용 (예 : 네트워크 트래픽, 파일 조작, 콘솔 출력 등)은 되돌릴 수 없습니다.
답변
디버거 내에서 프레임 삭제는 현재 스택 프레임을 팝하고 제어를 호출 메서드에 다시 넣어 모든 로컬 변수를 재설정합니다. 이것은 함수를 반복적으로 단계별로 진행하는 데 매우 유용하지만주의해야합니다. 필드 변형 또는 전역 상태 변경은 그대로 유지됩니다.
답변
디버거를 사용하여 스택에서 프레임을 삭제하면 기본적으로 애플리케이션 실행을 “되감기”하여 이전 상태에 도달 할 수 있습니다. 스택 프레임 외부의 변수는 되 돌리지 않습니다.
참고로이 기능은 Eclipse에서 “Drop to Frame” 이라고 생각 하지만 동일한 용도로 사용됩니다.