Depuración de procesos de Velneo
Última actualización
Última actualización
A partir de la versión 7.17, Velneo incorpora un depurador de procesos que nos permitirá encontrar y solucionar incidencias en nuestros desarrollos.
Podremos depurar en remoto cualquier aplicación instalada en un Velneo vServer, sin importar la ubicación. El depurador de procesos se invoca desde Velneo vDevelop. Eso quiere decir que, si queremos depurar un proceso de una instancia concreta de un servidor concreto, éste debe disponer al menos de un puesto de edición. Nos conectarnos con Velneo vDevelop a ese servidor y cargaremos la solución.
Para depurar un proceso hemos de incluir un punto de interrupción en cada línea del mismo en la que queramos realizar alguna comprobación. Un punto de interrupción hace que, cuando ejecutemos el proceso en modo de depuración, su ejecución se pare en ese punto.
Para añadir un punto de interrupción, editaremos el proceso con Velneo vDevelop, seleccionaremos la línea en la que queramos añadir el punto y pulsaremos F9 o haremos clic en la opción de la barra de herramientas del editor de procesos. Al hacerlo, a la izquierda de la línea se añadirá un punto:
Existen dos comandos de instrucción de proceso específicos que podemos usar cuando ejecutemos un proceso en debug
Debug Assert: este comando permite evaluar la condición establecida como parámetro y al ejecutar el proceso en modo de depuración, en caso de que no se cumpla la condición, detendrá la ejecución del depurador en esa línea.
Debug Mensaje: este comando permite presentar un mensaje cuando el proceso se ejecute modo de depuración. El mensaje se mostrará en el ventana de salida de mensajes del depurador.
Si ejecutamos la aplicación en modo normal, estos comandos serán omitidos al lanzar el proceso.
Para ejecutar la instancia en modo de depuración ejecutar la opción depurar solución actual (shift + F5) del menú soluciones.
En tiempo de ejecución, en el momento en el que se dispare el proceso, se abrirá la ventana de depuración, en la cual podremos ir revisando el circuito que sigue el proceso, comprobar valores de campos, variables, objetos en memoria, etc. que se vayan usando a lo largo del proceso.
La ejecución del proceso se detendrá al llegar al primer punto de interrupción que hayamos incluido en el mismo. En la parte inferior de la ventana veremos que se incluyen una serie de separadores en los que podremos ir consultando determinada información que se vaya generando desde el proceso. Más adelante las explicaremos.
Para continuar con la ejecución, disponemos de los siguientes comandos en la barra de herramientas del depurador:
En la parte inferior de la ventana del depurador se incluyen una serie de pestañas, donde podremos consultar la información que se vaya generando durante la ejecución del proceso. Esto es:
Muestra la pila de llamadas de la línea de instrucción en curso. Nos permite conocer de un vistazo la sucesión de líneas y comandos de instrucción que se han ejecutado para llegar a la línea en curso.
De cada línea del stack podremos consultar distinta información, según su origen sea ficha o lista.
Si es origen lista, podemos saber cuál es la tabla de origen y el número de fichas que contiene.
Si es origen ficha, podremos saber qué tabla es, qué dirección ocupa en el fichero, si se ha modificado o no durante el proceso y consultar el valor actual y anterior de sus campos.
Si estamos depurando un proceso transaccional (que escribe en disco), en esta pestaña podremos conocer el número de la transacción (el nº que se asigna a la transacción en Velneo vAdmin), su nombre, el número de operaciones realizadas y, si se usa el comando de instrucción cambiar porcentaje realizado del proceso, también se mostrará dicho dato.
Permite comprobar el valor que tienen las variables globales en un momento dado durante la ejecución del proceso. Se podrá consultar el valor de las variables globales de todos los proyectos heredados.
El depurador no muestra los valores iniciales de las variables globales en disco, muestra valor vacío en el caso de variables alfabéticas y 0 en el caso de variables numéricas.
Solamente devuelve su valor cuando se usan (cuando se leen o se modifican o bien en el propio proceso en debug, o bien en esa sesión de vClient).
Permite comprobar el valor que tienen las variables locales del proceso que estamos depurando en un momento determinado.
Permite comprobar las fichas en memoria del proceso, creadas con los comandos de instrucción crear nueva ficha en memoria y crear copia de ficha en memoria. En el depurador podremos comprobar la tabla asociada a la ficha, la posición física que ocupa dentro del fichero (si ya ha sido dada de alta) y el valor actual y anterior de sus campos.
Permite comprobar objetos en memoria del proceso, instanciados con los comandos de instrucción crear manejador de objeto. De los objetos podremos comprobar su tabla asociada (si la tiene), variables locales, número de fichas (en el caso de que se trate de un objeto de lista) y, si se trata de un objeto de ficha, por ejemplo formulario, podremos conocer el valor actual y anterior de los campos de esa ficha.
Aquí se mostrará la información generada por los comandos de instrucción de proceso debug Assert y debug Mensaje.
Si se ha cometido algún error la especificación de alguna fórmula de algún comando de instrucción del proceso , éste será mostrado en esta pestaña. Realiza la misma verificación que el verificador del asistente para edición de fórmulas.
Se pueden depurar procesos y manejadores de eventos ejecutados desde vClient en primer plano.
Es posible depurar procesos que son llamados desde otros procesos o manejadores que se estén ejecutando en 1º plano.
Se pueden depurar funciones. Pero no se puede entrar en ellas cómo se entra en un proceso, es decir, si se llama a una función de proceso, se pasa por la línea, con lo que para hacer debug de la función debemos poner un punto de interrupción en la función de proceso.
No es posible depurar procesos ejecutados desde vDataClient.
No es posible depurar procesos ejecutados en 2º o 3er plano.
No es posible depurar triggers de tablas en disco ni procesos ejecutados desde los triggers. Para estos casos recomendamos al programador que pase la tabla a memoria o copiar el código en un proceso y ejecutarlo desde un botón de un formulario o una acción, por ejemplo.
No es posible depurar eventos disparados con la señal de pre-inicialización del marco AUTOEXEC.
Si ejecutamos en debug un proceso de un proyecto que está protegido, el sistema solicitará que se introduzca la contraseña de edición del proyecto, si se introduce la contraseña válida, continuará la depuración, en caso contrario, se detendrá.
Si queremos quitar un punto de interrupción de una línea, seleccionarla y volver a pulsar F9 o el botón de la barra de herramientas del editor de procesos.
Si queremos quitar todos los puntos de interrupción de un proceso, pulsaremos el botón de la barra de herramientas del editor de procesos.
Continuar (F5): el proceso continuará su ejecución hasta el siguiente punto de interrupción. Si en el proceso se llama a una función o a otro proceso en primer plano que incluye un punto de interrupción, entonces el depurador entrará en ese proceso o función y se parará en el mismo. Una vez finalizado el proceso, el depurador retornará al proceso principal.
Paso a paso entrando en subniveles (F11): el proceso continuará su ejecución en la siguiente línea, tenga activado punto de interrupción o no. Si la siguiente línea es un subproceso de un comando, entrará en el mismo. Si la siguiente línea es la llamada a una función o a otro proceso en primer plano, entonces el depurador entrará en ese proceso o función y se detendrá en la primera línea del mismo. En definitiva, que comando nos permite seguir secuencialmente el circuito que va siguiendo el proceso, instrucción a instrucción.
Paso a paso saltando subniveles (F10): el proceso continuará su ejecución en la siguiente línea que esté al mismo nivel que la actual, tenga activado punto de interrupción o no. Si la línea actual tiene subniveles, no entrará en ellos. Si la siguiente línea es la llamada a una función o a otro proceso en primer plano, entonces el depurador entrará en ese proceso o función y se detendrá en el primer punto de interrupción del mismo. Si el proceso/función ejecutado no tiene puntos de interrupción, se ejecutará el se retornará a la siguiente línea del mismo nivel del proceso principal.
Ejecutar hasta la seleccionada (ctrl + F10): si hacemos clic en una línea del proceso, y ejecutamos esta opción, el proceso seguirá su ejecución y se parará en dicha línea. Si antes de la línea seleccionada hay algún punto de interrupción, se parará en él.
Entrar en otro proceso: si la línea sobre la que está detenido el depurador es un comando que dispara un proceso en primer plano (ejecutar proceso o disparar objeto), este comando haré que el debugger entre en dicho proceso.
Salir del proceso: si hemos entrado en otro proceso desde un proceso principal, este comando nos permitirá salir del proceso ejecutado. El proceso no será interrumpido, sino que finalizará su ejecución y se retornará al proceso principal. En el caso de que el proceso ejecutado tenga algún punto de interrupción, entonces se parará en él igualmente.
Conmutar punto de interrupción (F9): nos permitirá añadir/quitar un punto de interrupción en el proceso que estamos depurando. Los cambios que hagamos en los puntos de interrupción de un proceso desde el depurador se mantendrán durante esa sesión de vClient solamente.
Quitar todos los puntos de interrupción: quita todos los puntos de interrupción del proceso que estamos depurando. Los cambios que hagamos en los puntos de interrupción de un proceso desde el depurador se mantendrán durante esa sesión de vClient solamente.
Activar/desactivar línea: nos permite activar/desactivar la ejecución de una línea del proceso que estamos depurando. Si una línea está inactiva, no será ejecutada.
La opción limpiar ventana debug output nos permite borra todo el contenido de esta ventana.
La opción limpiar ventana de error log nos permite borra todo el contenido de esta ventana.