활성 도움말 디버깅 팁

활성 도움말 링크를 트리거하는 코드와 마크업은 단순해 보입니다. 그러나 활성 도움말 링크가 작동하지 않을 경우에는 어떻게 해야 할까요?

조치를 미리 테스트

조치 구현이 상당히 복잡할 경우 Eclipse 내의 일부 테스트 코드를 사용하여 조치를 호출해야 합니다. 이런 식으로 JavaScript에서 조치를 호출하기 전에 조치에 오류가 없는지 알 수 있습니다. 

JavaScript가 실행 중인지 확인

"plugins/org.eclipse.help_2.1.0/liveHelp.js"를 수정하여 liveAction 함수의 첫 번째 명령문으로 호출을 alert 함수에 포함시킬 수 있습니다.

function liveAction(pluginId, className, argument)
{
	alert("liveAction called");
	...

alert 함수는 브라우저에서 경고 대화 상자를 열고 이 함수를 사용하여 liveAction이 HTML에 제대로 호출되었는지 확인할 수 있습니다. 도움말 링크를 클릭했을 때 경고 대화 상자가 표시되지 않으면 HTML 마크업에 문제가 있는 것입니다.

활성 도움말 조치 디버그

JavaScript가 실행 중인지 확인한 후 Eclipse에서 조치를 디버그할 수 있습니다. 이를 수행하려면 도움말 조치 클래스에 중단점을 설정하고 자동으로 호스트되는 Eclipse 인스턴스를 시작합니다. 도움말 HTML의 JavaScript는 브라우저를 실행하는 Eclipse 도움말 서버의 Servlet을 호출하기 때문에 호스트 인스턴스가 아니라 새로 실행한 Eclipse 인스턴스의 도움말 브라우저를 사용하여 활성 도움말을 테스트해야 합니다.

중단점을 설정하고 활성 도움말 링크를 클릭한 후에도 아무 일이 발생하지 않으면 플러그인과 활성 도움말 클래스가 JavaScript에 제대로 지정되지 않았을 가능성이 높습니다. 

조치의 중단점에서 중지하도록 관리했으면 다른 Java 코드처럼 조치를 디버그할 수 있습니다.

UI 코드가 Display.syncExec에 있는지 확인

활성 도움말을 호출하는 스레드에서 UI 코드에 잘못 액세스하는 것이 공통된 런타임 문제점입니다. 활성 도움말 조치가 원래 UI 스레드에서 실행된 코드에서 온 경우 비 UI 스레드에서 실행 중인 항목을 처리할 수 있게 수정해야 합니다. 

public void run() {
		// Active help does not run on the UI thread, so we must use syncExec
		Display.getDefault().syncExec(new Runnable() {
							public void run() {
								//do the UI work in here;
							}
		});		
	}