Depuración de scripts
El sistema de Scripting de Altium Designer ofrece un entorno de depuración completo. El depurador de scripts le ayuda a identificar y resolver errores en scripts al proporcionar una variedad de herramientas automatizadas y paneles de información.
Errores de script
Los errores comunes incluyen métodos no válidos, operadores de agrupación mal ubicados, tipos incompatibles, errores lógicos y errores tipográficos. Cuando el sistema de scripting encuentra un error, el depurador pausa el script y muestra un cuadro de diálogo de error que indica el problema.
El siguiente ejemplo muestra un script con un carácter de terminación faltante y el mensaje correspondiente del cuadro de diálogo de error.
El depurador pausará un script en respuesta a errores de compilación o de ejecución.
Una vez cerrado el cuadro de diálogo de error, el código puede corregirse y el script volver a ejecutarse. Si es necesario detener el script, por ejemplo al ejecutarlo paso a paso, utilice el comando Stop (Run » Stop, Ctrl+F3) o el botón en la barra de herramientas Script Debug).
Depuración de scripts
El sistema de scripting dispone de una variedad de herramientas para ayudar en la depuración de scripts. Estas incluyen aplicar múltiples puntos de interrupción en un script, usar el panel Watch List para supervisar el valor de las variables, usar marcadores para desplazarse con mayor eficiencia y utilizar las funciones de step into y step over para seguir el recorrido de los scripts.
Por ejemplo, al comprobar los valores de variables y expresiones en un script, pueden utilizarse las siguientes funciones:
- Puntos de interrupción
- Información sobre herramientas de evaluación de expresiones
- Información sobre herramientas de Insight
- Cuadro de diálogo Evaluate
- Watch Expressions
► Consulte Script Editor Tools para obtener información sobre cómo usar las herramientas del editor al depurar scripts.
Seguimiento
Para ayudar a encontrar y resolver un error desconocido en un script, se puede insertar una serie de puntos de interrupción en un script para pausar el código en varios puntos mientras se comprueban los valores de variables y expresiones.
Sin embargo, en cualquier momento en que el script esté en pausa, también puede avanzarse una línea funcional a la vez usando las funciones de seguimiento/paso del depurador. De este modo, un punto de interrupción puede utilizarse para pausar inicialmente el script en el área de interés y luego avanzar una línea a la vez mediante la función de seguimiento. El proceso de ejecutar un script una línea a la vez se denomina seguimiento o ejecución paso a paso del script.
El depurador de scripts proporciona comandos relacionados con el seguimiento: stepping into (Run » Step Into) y stepping over (Run » Step Over). Esto le permite seguir el proceso del script y analizar su comportamiento al depurar el código del script.

Los comandos de depuración disponibles en el menú Run .
El proceso Step Into ejecuta el script una instrucción a la vez. El comando está disponible en el menú Run , en su botón asociado de la barra de herramientas Script Debug o mediante la tecla de acceso directo F7 .
Si la instrucción que se está ejecutando llama a otro procedimiento, al entrar en esa instrucción el control se transfiere a la primera línea del procedimiento llamado. El resaltado de color verde claro en el editor indica la línea de código en la que se encuentra el script. El proceso de ejecución paso a paso del script se cancela con el comando Run » Stop, el acceso directo Ctrl+F3 o el botón de la barra de herramientas

Comando Step Over
El proceso Step Over es similar a Step Into, excepto que si la instrucción actual es una llamada a otro procedimiento, todo el procedimiento llamado se ejecuta sin detenerse, en lugar de seguirlo paso a paso. El comando está disponible en el menú Run , en su botón asociado o mediante la tecla de acceso directo F8 .
Este comando resulta útil cuando se ha determinado que un procedimiento called no es la causa del problema en el procedimiento actual, y evita tener que seguir innecesariamente el procedimiento llamado línea por línea; ese procedimiento se “omite” con step over.
Panel Call Stack
El panel Call Stack se utiliza para ver la cadena de procedimientos y funciones que han llevado al punto actual de ejecución en el script que se está depurando.

El panel Call Stack
A medida que depura su script paso a paso, el panel mostrará el nombre de cualquier función o procedimiento en el que entre.
Cuando se encuentra una llamada a otra función o procedimiento, el panel mostrará el nombre de esta función/procedimiento adicional a medida que se entra en ella. Como la función/procedimiento se llama desde dentro de otra función/procedimiento, la función/procedimiento original seguirá mostrándose en el panel.
De hecho, se configura una “pila de llamadas”, que muestra la relación entre las llamadas descendientes de funciones/procedimientos. La función/procedimiento original aparece en la parte inferior de la pila, con cada función/procedimiento llamado posteriormente encima, hasta llegar a la función/procedimiento actual en la parte superior de la pila.
A medida que la ejecución del script sale de una subfunción/subprocedimiento y regresa a la función/procedimiento que llama, la primera se elimina de la pila y la función/procedimiento que llama pasa a ocupar la parte superior de la pila.
Al hacer doble clic en una entrada del panel, se saltará a la línea correspondiente del script en la que se realiza la llamada a la función o procedimiento seleccionado. La línea se resaltará con el color asociado a los errores de scripting y se mostrará el marcador de error de scripting en el margen derecho. Esto se usa únicamente con fines de resaltado. Desaparecerá al hacer clic en el documento y no inhibe de ninguna manera la sesión de depuración.
Excepciones y mensajes
Como suele ocurrir en todos los proyectos de programación, el desarrollo y la depuración del código del script no necesariamente terminan con un script “funcional”. Es probable que, en el uso práctico, un script encuentre errores imprevistos o no produzca los resultados esperados.
Afortunadamente, existen varias maneras de usar el sistema de scripting para manejar excepciones de ejecución y proporcionar comentarios al usuario sobre el funcionamiento del script.
Manejadores de excepciones
En DelphiScript, la palabra clave try introduce una instrucción try-except o una instrucción try-finally. Estas dos instrucciones están relacionadas, pero tienen propósitos diferentes.
Try Finally
En un manejador Try-Finally, las instrucciones del bloque finally siempre se ejecutan, independientemente de si ocurrió una excepción en el bloque try. Use el bloque try-finally para liberar objetos temporales u otros recursos y para realizar tareas de limpieza.
Reset(F);
Try
// process file F
Finally
CloseFile(F);
End;
Try Except
Use la instrucción Try-Except para capturar excepciones generadas y ejecutar el código relacionado de manejo de errores. Por ejemplo, puede capturarse una excepción específica y actualizar un registro o abrir un cuadro de diálogo descriptivo de error. Una excepción de código en el bloque try hace que se ejecute el bloque except.
En el siguiente ejemplo, se llama al procedimiento ApplyOffset, con parámetros adecuados, desde el procedimiento DefineOffset. El procedimiento realiza un cálculo simple de división (sobre las variables Ydim y Zdim ) e informa del resultado (Offset) en un cuadro de diálogo estándar.
Procedure ApplyOffset(Ydim, Zdim);
Var
Offset;
Begin;
Try
Offset := Ydim div Zdim;
ShowInfo('Calculated Offset = ' + IntToStr(Offset));
Except
ShowWarning('Entered Z dimension must be greater than zero.');
End;
End;
Procedure DefineOffset;
Begin;
ApplyOffset(32, 4);
End;
Para los parámetros ApplyOffset mostrados anteriormente (32,4), el script ejecutado mostrará el resultado calculado mediante el procedimiento ShowMessage, como se muestra a continuación.

Como alternativa, cambiar los parámetros pasados a 32,0 (ApplyOffset(32, 0);) provoca una excepción de división por cero en el cálculo Offset, activando el bloque manejador Except. Este utiliza el procedimiento ShowWarning para mostrar un cuadro de diálogo Warning pertinente.

Raise
La suposición en el procedimiento simple de manejo de errores anterior es que la excepción se genera en respuesta a un error de división por cero, pero esto significa que otros tipos de excepciones no se informarán correctamente mediante el texto del cuadro de advertencia. Sin embargo, en este ejemplo, es el error de excepción más probable que se encontrará.
No obstante, desde la perspectiva del usuario es deseable alguna forma de detección específica de errores. En DelphiScript, la palabra clave Delphi On (para capturar un tipo de excepción especificado) no es compatible, pero la instrucción Raise puede usarse dentro de un bloque Except para volver a generar la excepción más reciente, sea cual sea su tipo.
Try
Offset := Ydim div Zdim;
ShowInfo('Calculated Offset = ' + IntToStr(Offset));
Except
Raise;
End;
De este modo, cuando la mayor parte del código de un procedimiento existe dentro del bloque try de una instrucción try-except, todas las excepciones pueden ser informadas mediante la instrucción Raise . Tenga en cuenta que el cuadro de diálogo de excepción solo informará mensajes de error genéricos, en lugar de información específica del script.

Raise también puede usarse para provocar una excepción en respuesta a pruebas específicas, por ejemplo mediante sentencias simples if-then o case.
Procedure ApplyOffset(Ydim, Zdim);
Var
Offset;
Begin;
if Zdim > Ydim then
Begin;
Raise('Z dimension must be smaller than Y dimension.');
End;
Offset := Ydim div Zdim;
ShowInfo('Calculated Offset = ' + IntToStr(Offset));
End;
Aquí, si el parámetro Zdim del ejemplo anterior es mayor que el parámetro Ydim, se genera una excepción (con mensaje).

Errores en scripts VB
La implementación de VBScript en el motor de scripting de Altium Designer tiene funciones integradas que pueden usarse en proyectos de scripts VBScript, como la función MsgBox .
La sentencia On Error puede utilizarse al capturar errores en scripts de VB. Consulte la documentación de Microsoft VBScript para obtener más información sobre la captura de errores.
Mensajes
En general, los mensajes son la forma principal de mejorar el funcionamiento de los scripts desde la perspectiva del usuario.
Los mensajes pueden proporcionar alertas sobre excepciones o indicar información de ejecución y advertencias, y pueden insertarse en rutinas de script que gestionen datos de entrada, cálculos, operaciones con archivos o cualquier procedimiento en el que una visión del proceso resulte beneficiosa.
Cuadros de diálogo de mensajes
Junto con el cuadro de diálogo de mensaje básico disponible en el sistema de scripting (ShowMessage), existe una variedad de cuadros de diálogo específicos para proporcionar comentarios personalizados al usuario.
Estos incluyen procedimientos de mensajes como:
- ShowError
- ShowException
- ShowInfo
- ShowWarning
- y más..
Panel Messages
El panel Messages de Altium Designer puede ser una herramienta de depuración útil para scripting, pero también puede aplicarse para proporcionar al usuario un flujo continuo de información de mensajes útil.
El panel Messages es un objeto de Workspace Manager al que se accede desde la interfaz de Message Manager. El panel Messages puede utilizarse en un script para mostrar los estados de variables y propiedades (o, de hecho, cualquier otro dato), tanto para depuración como para comentarios al usuario, tal como se muestra en el ejemplo siguiente.
Procedure CreateMessages;
var
WS : IWorkSpace;
MM : IMessagesManager;
Begin
WS := GetWorkSpace; // obtain Workspace Manager interface
MM := WS.DM_MessagesManager; // obtain Message Manager interface
MM.ClearMessages; // initialize
MM.BeginUpdate;
// add relevant messages here using MM.AddMesssage procedures
MM.EndUpdate;
WS.DM_ShowMessageView; // display messages
End;
)
)