Tips for feilsøking i aktiv hjelp

Koden og kodetypen bak linken for den aktive hjelpen, ser nokså enkel ut.  Men hva gjør du hvis denne linken ikke virker?

Test handlingen på forhånd

Hvis handlingsimplementeringen er nokså betydelig, bør du aktivere selve handlingen med en testkode i Eclipse. På denne måten kan du forsikre deg om at handlingen er feilfri før du aktiverer den fra JavaScript. 

Forsikre deg om at JavaScript kjører

Du kan endre "plugins/org.eclipse.help_2.1.0/liveHelp.js" slik at det inkluderes et kall til varslingsfunksjonen, som første setning i liveAction-funksjonen:

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

Varslingsfunksjonen åpner en advarseldialogboks i nettleseren og kan brukes til å bekrefte at liveAction ble aktivert på riktig måte i HTML.  Hvis det ikke blir vist noen advarseldialogboks når du klikker på helpelinken, er det problemer med HTML-kodetypen.

Feilsøk aktiv hjelp-handlingen

Når du vet at JavaScript kjøres, kan du feilsøke handlingen fra Eclipse. Dette gjør du ved å definere et avbruddspunkt i klassen for hjelp-handlingen og starte en forekomst av Eclipse med selv-verting. Test den aktive hjelpen med hjelp-nettleseren fra den nystartede forekomsten av Eclipse, ikke fra forekomsten av verten siden JavaScript fra HTML-hjelpen kaller en servlett på Eclipse-hjelpeserveren som startet nettleseren.

Hvis det ikke skjer noe etter at du har definert avbruddspunktet og har klikket på linken for den aktive hjelpen, er sannsynligvis ikke plugin-modulen og klassen for den aktive hjelpen oppgitt riktig i JavaScript. 

Når du har klart å stoppe ved avbruddspunktet i handlingen, kan du feilsøke handlingen på samme måte som med annen Java-kode.

Forsikre deg om at brukergrensesnittkoden pakkes i Display.syncExec

Et vanlig kjøretidsproblem er feil tilgang til brukergrensesnittkoden fra tråden som aktiverer den aktive hjelpen.  Hvis koden for live hjelp-handlingen opprinnelig ble kjørt i en tråd med grensesnittilgang, må den endres slik at den håndterer kjøring fra en tråd uten grensesnittilgang. 

      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;
							}
		});		
	}