2010-12-01 3 views
5

저는 이클립스 (쓰기, 디버그)를 IDE로 사용합니다. 로컬 변수를 초기화하는 것과 같은 몇 가지 변경을하면 디버그 모드에서 자동으로 반영됩니다.디버그 모드에서 Eclipse에 자동으로 반영되는 코드 변경 사항은 무엇입니까?

하지만 정적 변수의 값을 변경하는 것과 같은 다른 변경 사항도 있습니다. 때로는 VM을 다시 시작해야한다는 메시지가 표시되고 때로는 그렇지 않습니다.

이제 문제는 자동으로 반영되는 변경 사항과 그렇지 않은 변경 사항입니다.

원격 디버깅을 사용하지만 이클립스에서 프로그램을 실행할 때 어떤 차이가 있습니까?

답변

2

IDE 기능이 아니라 원격 디버깅의 VM 기능입니다. VM은 이제 변수 이니셜 라이저의 메소드 내에서 로직의 간단한 변경 사항을 처리 할 수 ​​있지만 변경된 클래스 구조로 처리 할 수는 없습니다.

클래스 구조가 변경되지 않으면 다시로드됩니다. 멤버 또는 내부 클래스를 추가하거나 추가하면 클래스 메모리에 할당되는 크기가 변경되므로 멤버, 메서드 또는 내부 클래스를 제거하거나 추가하지 마십시오. 메서드는 메모리 크기를 변경하지 않지만 구조를 변경합니다.

Here 몇 가지 설명을 찾을 수 있습니다.

3

Hotswap이 실제로 보입니다. 방법 본문 만 변경하면됩니다. 더 많은 정보 here.

0

eclipse가 다른 JVM 내부의 클래스 파일을 스왑 할 수 없기 때문에 원격 디버깅에서는 핫 코드 대체가 전혀 불가능합니다.

원격 디버거는 다른 가상 컴퓨터에 연결하고 해당 원격 컴퓨터에서 실행되는 코드를 모니터링합니다. 소스 파일 만 로컬 파일입니다.

+0

오른쪽! 내가하는 일은 JVM이 실행중인 원격 컴퓨터에서 클래스 파일을 컴파일하는 것입니다. 원격 디버깅도 가능합니다. –

0

정적 변수는 클래스에 대해 인스턴스화 된 클래스 변수입니다. 수업 로딩 시간에 인스턴스화됩니다. 따라서 정적 변수를 변경하면 VM이 다시로드되고 변경된 정적 변수가 인스턴스화되어야합니다.

그게 내가 당신의 질문에 제공 할 수있는 전부입니다.

0

HotSwap은 매우 제한적이며, 간단한 방법 본체 변경 만 다시로드 할 수 있습니다.

JRebel에서 다른 코드 변경 사항 (예 : 필드/메소드/주석/열거 형 값 추가/제거 등)을 다시로드 할 수 있습니다. 자세한 내용은 feature list을 참조하십시오.

(JRebel은 OSS와 스칼라 개발자를위한 사용 가능한 라이센스에 상용 제품이라고 있습니다.)

관련 문제