Uso de depuradores y otras herramientas

Estas secciones describen una introducción general, no específica del lenguaje, al uso de un depurador u otra herramienta de diagnóstico en un proceso AE.

Ejecución en el host

Como regla general, debes realizar la depuración en el host. Por lo tanto, los EA y las solicitudes deben estar ejecutándose en el host. Existen dos técnicas para conseguir que las peticiones se ejecuten en el host:

  • Para las funciones escalares, de tabla y agregadas, la función SQL recibe todos los argumentos literales.
    SELECT applyOperationV1Sf('+', 1, 2, 3);
    SELECT * FROM TABLE WITH FINAL(applyOperationV1Tf('+', 1, 2, 3));
    
  • Para una función de tabla solamente, registre el AE con la opción --noparallel.

Esta opción hace que el AE se ejecute en el host para que pueda recibir argumentos de datos de tablas normales, así como literales. La opción --noparallel no puede utilizarse con funciones escalares. Sin embargo, las funciones de tabla y las funciones escalares utilizan la misma API AE, por lo que se puede llamar fácilmente a una función escalar AE desde una función de tabla SQL con fines de depuración (porque una función de tabla tiene un superconjunto de capacidades de función escalar). Para ello, registre el AE escrito como función escalar como función de tabla. La mayoría de los EA de funciones de tabla no pueden registrarse como funciones escalares a menos que devuelvan exactamente una fila de salida por cada fila de entrada y tengan exactamente una columna en una fila.

Dos métodos de depuración

Existen dos enfoques generales a la hora de utilizar una herramienta de diagnóstico/depuración en un proceso AE.

  • Adjuntar a un proceso ya en ejecución.
  • Haz que el AE ejecute la herramienta de diagnóstico/depuración que luego carga el AE.

Con el método de conexión, debe proporcionar el ID del proceso AE y el proceso debe esperar a que se conecte la herramienta.

Archivos locales AE y Spin

Para un EA local, se dispone de un mecanismo de archivo de giro. Cuando se activa, el tiempo de ejecución AE busca el archivo especificado por la variable AE ENV. Si el archivo existe, el AE runtime duerme un rato y luego comprueba de nuevo la existencia del archivo. El tiempo de ejecución de AE también imprime información sobre el proceso en el archivo de registro de errores estándar. El bucle continúa hasta que se cambia el nombre del archivo o se elimina.

Ejemplo

spinning in process id=15796, thread id=15797 on file /tmp/spin_ae.on

Una vez conectada la herramienta, elimine o cambie el nombre del archivo. A continuación, el AE reanuda la ejecución normal.

Ejemplo

mv /tmp/spin_ae.on /tmp/spin_ae.off

El mecanismo de archivos giratorios se activa mediante una variable de entorno AE.

--environment "'NZAE_HOST_ONLY_NZAE_SPIN_FILE_NAME'='/tmp/spin_ae.on'"

Observe cómo se utiliza el prefijo NZAE_HOST_ONLY_ para evitar el uso accidental del mecanismo de archivo de giro en las SPU.

AE remoto

Dado que un AE remoto suele ser un proceso de larga ejecución, adjuntar una herramienta como GDB suele ser mucho más sencillo. Utilice la función nzaejobcontrol para hacer ping al AE remoto para obtener el ID del proceso y otra información necesaria para el depurador.