O código e a marcação que desencadearam a nossa ligação de ajuda activa parecem muito simples. Mas o que se deve fazer quando a ligação de ajuda activa não quer funcionar?
Se a implementação da acção estiver muito implicada, deverá invocar a acção por si mesmo(a) com algum código de teste dentro do Eclipse. Desta forma saberá que a acção está livre de erros antes de a invocar a partir do JavaScript.
Poderá modificar "plugins/org.eclipse.help_2.1.0/liveHelp.js" para incluir uma chamada à função alert como primeira instrução na função liveAction:
function liveAction(pluginId, className, argument) { alert("liveAction called"); ...
A função alert abre uma caixa de diálogo de aviso no browser e pode ser usada para verificar se liveAction foi devidamente invocada no código HTML. Se não vir uma caixa de diálogo de aviso quando fizer clique na ligação de ajuda, será porque há problemas na marcação HTML.
Assim que souber que o JavaScript está em execução, poderá depurar a acção de dentro do Eclipse. Para isso, poderá definir um ponto de quebra na classe da acção de ajuda e iniciar uma instância Eclipse auto-alojada. Deve testar a ajuda activa com o browser de Ajuda a partir da instância Eclipse acabada de lançar e não da instância de sistema central, dado que o JavaScript do código HTML de ajuda chama um servlet no servidor de ajuda Eclipse que lançou o browser.
Se nada acontecer depois de configurar o ponto de quebra e fazer clique na ligação da ajuda activa, é provável que o plug-in e a classe de ajuda activa não tenham sido correctamente especificados no JavaScript.
Quando conseguir parar no ponto de quebra na sua acção, poderá depurar a acção como faria a qualquer outro código Java.
Um dos problemas de tempo de execução comuns consiste em aceder indevidamente ao código da UI a partir do módulo que chama a ajuda activa. Se a acção de ajuda activa for oriunda de código executado originalmente num módulo de UI, terá que ser modificado para tratar o facto de estar em execução a partir de um módulo alheio à 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; } }); }