El código y los códigos XML que han desencadenado nuestro enlace de la ayuda activa parecen muy sencillos. Pero, ¿qué haremos si resulta que el enlace no funciona?
Si la implementación de la acción tiene implicaciones, debe invocarla desde dentro de Eclipse utilizando código de prueba. De este modo, antes de invocarla desde JavaScript, sabrá que la acción no tiene ningún error.
Puede modificar "plugins/org.eclipse.help_2.1.0/liveHelp.js" para que incluya una llamada a la función alert como primera sentencia de la función liveAction:
function liveAction(pluginId, className, argument) { alert("liveAction called"); ...
La función alert abre un diálogo de aviso en el navegador y permite verificar que se ha invocado debidamente la función liveAction en el código HTML. Si no ve un diálogo de aviso al pulsar el enlace de la ayuda, es que habrá algún problema en los códigos HTML.
Cuando esté seguro de que JavaScript está en ejecución, podrá depurar la acción desde dentro de Eclipse. Para ello, puede establecer un punto de interrupción en la clase de la acción de ayuda e iniciar una instancia de Eclipse autoalojada. Debe probar la ayuda activa con el navegador de ayuda desde la instancia de Eclipse que acaba de lanzar, no desde la instancia de su sistema principal, porque el JavaScript del HTML de ayuda llama a un servlet situado en el servidor de ayuda de Eclipse que ha lanzado el navegador.
Si no ocurre nada después de haber establecido el punto de interrupción y pulsado el enlace de la ayuda activa, es probable que el conector y la clase de la ayuda activa no estén correctamente especificados en el JavaScript.
Cuando haya logrado detenerse en el punto de interrupción de la acción, podrá depurarla igual que se depura el código Java en general.
Un problema común que suele producirse en tiempo de ejecución es el acceso indebido al código de la UI desde la hebra que invoca la ayuda activa. Si la acción de ayuda activa procede de código ejecutado originalmente en una hebra de la UI, habrá que modificarla para manejar el hecho de que se esté ejecutando desde una hebra no de la UI.
public void run() { // La ayuda activa no se ejecuta en la hebra de la UI, por lo que debemos usar syncExec Display.getDefault().syncExec(new Runnable() { public void run() { //hacer aquí el trabajo de la UI; } }); }