Debugging Scripts

 

Il sistema di scripting di Altium Designer offre un ambiente di debug completo. Il Debugger di scripting aiuta a identificare e risolvere gli errori negli script fornendo una gamma di strumenti automatizzati e pannelli informativi.

Errori di script

Gli errori comuni includono metodi non validi, operatori di raggruppamento posizionati in modo errato, tipi non corrispondenti, errori logici ed errori tipografici. Quando il sistema di scripting rileva un errore, il debugger mette in pausa lo script e visualizza una finestra di dialogo di errore che indica il problema.

L'esempio seguente mostra uno script con un carattere di terminazione mancante e il relativo messaggio nella finestra di dialogo di errore.

 Il debugger metterà in pausa uno script in risposta a errori di compilazione o di esecuzione.

Una volta chiusa la finestra di dialogo di errore, il codice può essere corretto e lo script rieseguito. Se lo script deve essere arrestato, ad esempio durante l'esecuzione passo passo, utilizzare il comando Stop (Run » Stop, Ctrl+F3) o il pulsante ( sulla barra degli strumenti Script Debug).

Ci sono situazioni in cui un errore può causare il blocco di uno script in un ciclo infinito e lo script diventa non rispondente. Per risolvere questo problema, premere i tasti di scelta rapida Ctrl+Pause/Break per interrompere il ciclo dello script.

Debug degli script

Nel sistema di scripting è disponibile una gamma di strumenti per aiutare nel debug degli script. Questi includono l'applicazione di breakpoint multipli in uno script, l'uso del pannello Watch List per monitorare il valore delle variabili, l'uso dei segnalibri per spostarsi in modo più efficiente e l'uso delle funzioni step into e step over per seguire l'esecuzione degli script.

Ad esempio, durante il controllo dei valori di variabili ed espressioni in uno script, è possibile utilizzare le seguenti funzionalità:

► Vedere Strumenti dell'editor di script per informazioni sull'uso degli strumenti dell'editor durante il debug degli script.

Se si sta eseguendo il debug di uno script che agisce su un documento aperto, ad esempio quando si utilizza l'interfaccia IPCB_Board per ottenere dati da un documento PCB, l'editor di script non sarà in grado di rilevarlo come documento attivo. In questo caso, salvare tutte le modifiche apportate e quindi eseguire lo script dal documento attivo stesso (File » Run Script).

Tracciamento

Per aiutare a individuare e risolvere un errore sconosciuto in uno script, è possibile inserire una serie di breakpoint in uno script per mettere in pausa il codice in più punti mentre si controllano i valori di variabili ed espressioni.

Tuttavia, in qualsiasi momento in cui lo script è in pausa, può anche essere fatto avanzare una riga funzionale alla volta utilizzando le funzioni di tracciamento/step del Debugger. In questo modo, un breakpoint può essere usato per mettere inizialmente in pausa lo script nell'area di interesse e poi farlo avanzare una riga alla volta usando la funzione di tracciamento. Il processo di esecuzione di uno script una riga alla volta è chiamato tracciamento o esecuzione passo passo dello script.

Il debugger di script fornisce comandi relativi al tracciamento: step into (Run » Step Into) e step over (Run » Step Over). Questo consente di seguire il processo dello script e analizzarne il comportamento durante il debug del codice dello script.

I comandi di debug disponibili nel menu Run .
I comandi di debug disponibili nel menu Run .

Comando Step Into

Il processo Step Into esegue lo script un'istruzione alla volta. Il comando è disponibile dal menu Run , dal relativo pulsante sulla barra degli strumenti Script Debug () oppure tramite il tasto di scelta rapida F7 .

Se l'istruzione in esecuzione richiama un'altra procedura, l'esecuzione step into di tale istruzione trasferisce il controllo alla prima riga della procedura chiamata. L'evidenziazione color verde pisello nell'editor indica la riga di codice a cui è arrivato lo script. Il processo di esecuzione passo passo dello script viene annullato con il comando Run » Stop, la scorciatoia Ctrl+F3 o il pulsante della barra degli strumenti ().

Comando Step Over

Il processo Step Over è simile a Step Into, con la differenza che se l'istruzione corrente è una chiamata a un'altra procedura, l'intera procedura chiamata viene eseguita senza fermarsi, invece di seguirla passo passo. Il comando è disponibile dal menu Run , dal relativo pulsante () oppure tramite il tasto di scelta rapida F8 .

Questo comando è utile quando è stato determinato che una procedura called non è la causa del problema nella procedura corrente, ed evita di dover seguire inutilmente la procedura chiamata riga per riga: tale procedura viene quindi "saltata".

Utilizzare il comando Run » Run To Cursor dai menu principali (scorciatoia: Ctrl+F9) per eseguire uno script fino alla posizione del cursore. Lo script si mette in pausa su quella riga come se avesse incontrato un breakpoint, da cui può essere eseguito o fatto avanzare passo passo.

Pannello Call Stack

Il pannello Call Stack viene utilizzato per visualizzare la catena di procedure e funzioni che hanno portato al punto corrente di esecuzione nello script sottoposto a debug.

Il pannello Call Stack 
Il pannello Call Stack 

Durante il debug passo passo dello script, il pannello mostrerà il nome di qualsiasi funzione o procedura in cui si entra.

Quando viene rilevata una chiamata a un'altra funzione o procedura, il pannello mostrerà il nome di questa funzione/procedura aggiuntiva nel momento in cui vi si entra. Poiché la funzione/procedura viene chiamata dall'interno di una funzione/procedura, la funzione/procedura originale continua a essere visualizzata nel pannello.

Viene così effettivamente impostato uno "stack di chiamate", che mostra la relazione tra le chiamate discendenti di funzioni/procedure. La funzione/procedura originale appare in fondo allo stack, con ogni funzione/procedura chiamata successivamente sopra di essa, fino alla funzione/procedura corrente in cima allo stack.

Quando l'esecuzione dello script esce da una sottofunzione/sottoprocedura e ritorna alla funzione/procedura chiamante, la prima verrà rimossa dallo stack e la funzione/procedura chiamante diventerà la cima dello stack.

Facendo doppio clic su una voce nel pannello si passa alla riga di script corrispondente in cui viene effettuata la chiamata alla funzione o procedura selezionata. La riga verrà evidenziata con il colore associato agli errori di scripting e mostrerà il marcatore di errore di scripting nel margine destro. Questo viene usato esclusivamente a scopo di evidenziazione. Scomparirà quando si fa clic sul documento e non ostacola in alcun modo la sessione di debug.

Eccezioni e messaggi

Come spesso accade in tutti i progetti di programmazione, lo sviluppo e il debug del codice dello script non si fermano necessariamente a uno script "funzionante". È probabile che, nell'uso pratico, uno script incontri errori imprevisti o non produca i risultati attesi.

Fortunatamente, esistono diversi modi in cui il sistema di scripting può essere utilizzato per gestire le eccezioni di esecuzione e fornire all'utente un feedback sul funzionamento dello script.

Gestori di eccezioni

In DelphiScript, la parola chiave try introduce un'istruzione try-except oppure un'istruzione try-finally. Queste due istruzioni sono correlate ma hanno scopi diversi.

Try Finally

In un gestore Try-Finally, le istruzioni nel blocco finally vengono sempre eseguite, indipendentemente dal fatto che nel blocco try si sia verificata o meno un'eccezione. Utilizzare il blocco try-finally per liberare oggetti temporanei o altre risorse e per eseguire attività di pulizia.

Reset(F);
Try
  // process file F
Finally
  CloseFile(F);
End;

Try Except

Utilizzare l'istruzione Try-Except per intercettare le eccezioni generate ed eseguire il relativo codice di gestione degli errori. Ad esempio, è possibile intercettare un'eccezione specifica e aggiornare un log oppure aprire una finestra di dialogo di errore descrittiva. Un'eccezione nel codice del blocco try provoca l'esecuzione del blocco except.

Nell'esempio seguente, la procedura ApplyOffset viene chiamata, con parametri appropriati, dalla procedura DefineOffset. La procedura esegue un semplice calcolo di divisione (sulle variabili Ydim e Zdim ) e riporta il risultato (Offset) in una finestra di dialogo standard.

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;

Per i parametri ApplyOffset mostrati sopra (32,4), lo script eseguito mostrerà il risultato calcolato utilizzando la procedura ShowMessage, come mostrato di seguito.

In alternativa, modificando i parametri passati a 32,0 (ApplyOffset(32, 0);) si provoca un'eccezione di divisione per zero nel calcolo Offset, attivando il blocco gestore Except. Questo utilizza la procedura ShowWarning per visualizzare una finestra di dialogo Warning pertinente.

Nella modalità di debug dell'editor di script, un'eccezione metterà in pausa l'esecuzione dello script quando la finestra di dialogo Error viene chiusa. Utilizzare il comando Run o Step Into per continuare.

Raise

L'ipotesi nella semplice procedura di gestione degli errori sopra descritta è che l'eccezione venga generata in risposta a un errore di divisione per zero, ma ciò significa che altri tipi di eccezioni non verranno riportati accuratamente dal testo della finestra di avviso. In questo esempio, tuttavia, è l'errore di eccezione più probabile che si verifichi.

Una qualche forma di rilevamento specifico dell'errore è comunque auspicabile dal punto di vista dell'utente. In DelphiScript, la parola chiave Delphi On (per intercettare un tipo di eccezione specificato) non è supportata, ma l'istruzione Raise può essere utilizzata all'interno di un blocco Except per rilanciare l'eccezione più recente, qualunque sia il suo tipo.

Try
   Offset := Ydim div Zdim;
   ShowInfo('Calculated Offset = ' + IntToStr(Offset));
Except
   Raise;
End;

In questo modo, quando la maggior parte del codice di una procedura si trova all'interno del blocco try di un'istruzione try-except, tutte le eccezioni possono essere segnalate dall'istruzione Raise . Si noti che la finestra di dialogo dell'eccezione riporterà solo messaggi di errore generici, anziché informazioni specifiche dello script.

   

Raise può essere utilizzato senza parametri per rilanciare l'ultima eccezione, oppure con un parametro stringa per fornire un messaggio di errore specifico.può anche essere utilizzato per provocare un'eccezione in risposta a test specifici, ad esempio applicando semplici istruzioni 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;

Qui, se il parametro Zdim dell'esempio precedente è maggiore del parametro Ydim, viene generata un'eccezione (con messaggio).

Errori negli script VB

L'implementazione VBScript nel motore di scripting di Altium Designer dispone di funzioni integrate che possono essere utilizzate nei progetti di script VBScript, come la funzione MsgBox .

L’istruzione On Error può essere utilizzata quando si intercettano errori negli script VB. Consultare la documentazione Microsoft VBScript per ulteriori informazioni sull’intercettazione degli errori.

Messaggi

In generale, i messaggi sono il modo principale per migliorare il funzionamento degli script dal punto di vista dell’utente.

I messaggi possono fornire avvisi per eccezioni oppure indicare informazioni di esecuzione e avvertenze, e possono essere inseriti nelle routine di script che gestiscono dati di input, calcoli, operazioni sui file o qualsiasi procedura in cui una visione del processo possa risultare utile.

Finestre di dialogo dei messaggi

Insieme alla finestra di dialogo dei messaggi di base disponibile nel sistema di scripting (ShowMessage), è disponibile una gamma di finestre di dialogo specifiche per fornire un feedback utente mirato.

Queste includono procedure di messaggistica quali:

  • ShowError
  • ShowException
  • ShowInfo
  • ShowWarning
  • e altre..

Pannello Messages

Il pannello Messages di Altium Designer può essere un utile strumento di debug per gli script, ma può anche essere utilizzato per fornire all’utente un flusso continuo di informazioni di messaggio utili.

Il pannello Messages è un oggetto Workspace Manager a cui si accede dall’interfaccia Message Manager. Il pannello Messages può essere utilizzato in uno script per mostrare gli stati di variabili e proprietà (o in effetti qualsiasi altro dato), sia per il debug sia per il feedback all’utente, come illustrato nell’esempio seguente.

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;
AI-LocalizedLocalizzato tramite A
Se trovi un problema, seleziona il testo/l’immagine e premi Ctrl + Invio per inviarci il tuo feedback.
Disponibilità delle funzionalità

Le funzionalità disponibili dipendono dalla soluzione Altium in uso – Altium Develop, un’edizione di Altium Agile (Agile Teams o Agile Enterprise), oppure Altium Designer (con licenza attiva).

Se non vedi nel tuo software una funzionalità descritta,  contatta il team vendite di Altium per saperne di più.

Documentazione legacy

La documentazione di Altium Designer non è più suddivisa per versione. Se è necessario accedere alla documentazione delle versioni precedenti di Altium Designer, visitare la sezione Documentazione legacy della pagina Altri programmi di installazione.

Contenuto