What should you do when things go awry with your scripting?What should you do when things go awry with your scripting?What should you do when things go awry with your scripting?What should you do when things go awry with your scripting?Cosa dovresti fare quando le cose vanno male con il tuo scripting? Bentornato!
Se ti sei appena unito a noi, sei entrato proprio nel bel mezzo di una serie che mira a introdurre le persone a utilizzare il linguaggio di scripting JMP. A differenza delle voci precedenti in la serie , probabilmente non hai bisogno di leggere gli altri perché questo abbia senso, ma se vuoi stare al gioco e fare i compiti dalle altre voci, ecco i link
Inoltre, un grande ringraziamento a Christian Stopp ( @christianstopp ) per aver suggerito questa voce della serie.
Questa parte della serie è in gran parte una voce indipendente. Ma, nel flusso delle cose, questo è probabilmente il punto in cui hai iniziato a giocare con del codice e potresti aver visto uno o due messaggi di errore. Quindi, prima di iniziare con qualsiasi discussione seria sul codice, vediamo cosa fare quando le cose vanno male.
Gli errori più comuni in JSL
Justin Chilton ( @Justin_Chilton ) e Wendy Murphrey ( @Wendy_Murphrey ) sono tra i migliori scripter di JMP . Al JMP Discovery Summit americano del 2020, hanno presentato (virtualmente) un documento intitolato "Gli errori JSL più comuni e come evitarli". È possibile trovare il file PowerPoint per quella presentazione Qui sulla Comunità.
Per il nuovo scripter, si tratta di 14 pagine di oro massiccio. Nel contesto di ciò che stiamo facendo in questa serie, alcuni di essi sono un po' fuori portata, ma saranno preziosi per i prossimi passi nel tuo percorso di scripting. Fammi solo un favore, scarica il pdf, mettilo in un posto dove non te ne dimenticherai e dai un pollice in su al documento nella pagina della community.
Gli errori JSL più comuni di Mike
Per fare un piccolo riassunto del lavoro di Justin e Wendy, voglio aggiungere un paio di cose alla loro lista. Questi sono piuttosto semplici e generalmente causano l'arresto anomalo di uno script prima ancora che venga eseguito (motivo per cui non vengono visualizzati nel documento del Discovery Summit).
Colla
Gli operatori di colla mancanti sono probabilmente l'errore JSL più comune in circolazione. Come ho detto prima, l'operatore Glue è il punto e virgola (“;”) che vedi alla fine di ogni istruzione in JSL. Se stai salvando gli script in una finestra di script utilizzando il menu del triangolo rosso (vedi il messaggio precedente ), JMP aggiungerà la colla dove necessario. Se stai scrivendo il codice manualmente, c'è un trucco che puoi usare per assicurarti di non dimenticarne uno da qualche parte. Fare clic con il tasto destro nello Script Editor e selezionare Riformatta lo script .

Questo trucco in realtà rileverà molti errori di base relativi alla sintassi nello script. C'è anche una scorciatoia da tastiera quando sei nello Script Editor (non funziona però nelle “caselle dell'editor di script”). Personalmente preferisco la scorciatoia da tastiera. Per Windows, lo è CTRL+M . Per MacOS, lo è CMD+M .
Ora, prima di mostrarti come decomprimere ciò che Reformat Script ti dice quando si verifica un errore, lasciami mostrare l'altro errore che mi fa impazzire. Dato che entrambi utilizzano un flusso di lavoro di debug simile, questo avrà senso tra un secondo, lo prometto.
Parentesi
Mettere le parentesi quadre (parentesi graffe, graffe, ecc.) fuori posto (o mancanti) è probabilmente il bug più insidioso da scovare. E intendo dire che è a speciale un po' frustrante. In JMP è disponibile uno strumento che consente di individuare le coppie di parentesi non corrispondenti. Quando posizioni il cursore all'esterno di una parentesi, lo Script Editor la evidenzierà (e ciò che pensa sia la sua corrispondenza) in blu.

Se lo Script Editor è confuso o non riesce a trovare una corrispondenza, evidenzierà la parentesi in rosso.

Quindi, se la corrispondenza blu per una parentesi non è dove ti aspetti che sia, o se la parentesi è evidenziata in rosso, probabilmente hai un problema.
Quando ricevi errori per parentesi mancanti, potresti essere tentato di continuare ad aggiungerle fino alla fine finché l'errore non scompare. Lasciatemi solo dire che è una cattiva idea e passiamo ad alcune strategie migliori per questo problema e per il problema della colla mancante. Entrambi ruotano attorno alla configurazione dello Script Editor di JMP.
Configurazione (e utilizzo) dello Script Editor per il successo
L'editor di script JMP (l'abbiamo visto in il messaggio precedente ) dispone di una serie di funzionalità che semplificano il lavoro con il codice e il debug. Li ho attivati per impostazione predefinita nelle mie preferenze e ti suggerirei di fare lo stesso. Per accedere alla finestra di dialogo Preferenze JMP, selezionare Preferenze dal menu JMP (MacOS) o dal menu File (PC).

Nello screenshot ho evidenziato le opzioni che trovo davvero utili. La piegatura del codice è utile per script più grandi. I numeri di riga e le opzioni di completamento automatico sono più importanti per la nostra discussione attuale.
Come utilizzare il registro
Ora che abbiamo configurato il nostro Script Editor, impariamo come utilizzare il registro. Per prima cosa, per aprire il registro, vai su Visualizza > Registro ( Finestra > Registro su un Mac). Si aprirà una finestra simile a uno Script Editor. È diverso dallo Script Editor in quanto mostra il file produzione e i risultati dei comandi eseguiti nello Script Editor. Se preferisci mantenere l'input e l'output nella stessa finestra, puoi attivare il registro incorporato nello Script Editor facendo clic con il pulsante destro del mouse nello Script Editor e selezionando Mostra registro incorporato .

Diamo un'occhiata a come funziona utilizzando questo script:

La sceneggiatura è piuttosto semplice. A parte la riga 2 e i commenti, è stato creato utilizzando Salva script…nella finestra dello script . Se corro Riformatta lo script (che si trova anche facendo clic con il pulsante destro del mouse nella finestra dello script), viene visualizzato il seguente messaggio di errore:

Nel registro, ottieni qualcosa di simile:

Nell'area grigia puoi vedere cosa è stato inserito. Sotto di esso viene visualizzato un messaggio relativo a qualcosa di inaspettato e un suggerimento su quale potrebbe essere il problema. In questo caso, JMP ritiene che manchi colla (;). Ti dice anche dove è arrivato l'input imprevisto nello script con un numero di riga. Poiché JSL viene eseguito in sequenza (dall'alto al basso), ciò significa che l'errore si trova da qualche parte sopra la riga 5. Poiché abbiamo attivato i numeri di riga, possiamo vedere che alla riga 2 manca l'operatore Glue, il che significa che JMP non si aspetta che un nuovo comando inizi alla riga 5 e viene colto di sorpresa. Dopo aver aggiunto il punto e virgola alla fine della riga 2, running Riformatta lo script non dovrebbe restituire alcun errore.
Allo stesso modo, se manca parte di una coppia di parentesi (ad esempio, parentesi), come questa (riga di avviso 7):

otterremmo questo messaggio di errore:

con un messaggio di registro:

Questi messaggi di JMP sono un po' meno chiari, ma ecco come interpretarli. Innanzitutto, dal messaggio di errore, sappiamo che il problema è nella distribuzione. Tra il log e il messaggio di errore è molto probabile che manchi una parentesi da qualche parte. Il registro dice che è successo qualcosa di inaspettato alla riga 11 (la "Colonna..." a volte può essere utile, ma devi contare i caratteri per usarla). Il colore che evidenzia le parentesi mostra che alla prima manca la sua coppia (notare il colore rosso sulla parentesi accanto a Distribuzione nella riga 5 dopo aver posizionato il cursore alla sua sinistra).

Procedi utilizzando l'evidenziazione per capire dove dovrebbe andare quello mancante (riga 7 in questo caso). Nella maggior parte dei casi, il registro è una finestra davvero utile su ciò che JMP ritiene stia accadendo. Tuttavia, se desideri verificare la presenza di errori nel tuo JSL o elaborare il codice passo passo, c'è un altro strumento per questo.
Come utilizzare il debugger JSL
Il debugger JSL è una bestia un po' strana. Se hai premuto accidentalmente il pulsante del debugger:

probabilmente già sai che blocca l'interfaccia principale di JMP durante l'esecuzione. Quando ho iniziato a scrivere script, non l'ho usato molto. Ora che ho avuto qualche chiacchierata con il team di sviluppo a riguardo, posso dire che ci sto arrivando. Parliamo un po' di questo e di cosa può fare.
Innanzitutto, il fatto che blocca JMP. È un po' confuso, ma in realtà ciò che fa è creare una seconda istanza di JMP per eseguire il debug. L'istanza principale di JMP non risponderà finché il debugger JSL sarà attivo. Se chiudi il debugger JSL, riprenderai il controllo.
Quando si avvia JSL Debugger, oltre a un'altra istanza di JMP, viene visualizzata la finestra JSL Debugger. Questa finestra contiene il tuo codice, elenchi delle diverse variabili, un registro e altre informazioni. Sembra qualcosa del genere:

Durante il debug, questa finestra è il tuo sguardo e le tue orecchie su ciò che lo script sta facendo in JMP. Se hai un secondo schermo, spostalo lì, così puoi sempre vederlo (a volte può rimanere nascosto dietro altre finestre).
Ora, potrei impazzire descrivendo tutto ciò che potresti fare con JSL Debugger, ma la documentazione ha un bellissimo capitolo (con esempi!) che puoi trovare Qui .
C'è anche un bene post sul blog di Melanie Drake ( @Melanie_J_Drake ) che copre alcune delle cose interessanti che puoi fare con JSL Debugger. Quindi, se vuoi addentrarti un po' tra le erbacce, dai un'occhiata a quelli. Per i nostri scopi, voglio che tu presti attenzione a questi pulsanti:

I primi due eseguono lo script. Il primo esegue lo script fino alla fine o nel punto in cui incontra un punto di interruzione (un punto in cui si desidera interrompere la valutazione se non si desidera eseguire l'intero script). Puoi impostare un punto di interruzione nel codice facendo clic con il pulsante destro del mouse accanto al numero di riga nel debugger JSL. Accanto a quella riga apparirà un punto rosso (il punto di interruzione deve trovarsi su una riga di codice, non su un commento!).

Se dovessi eseguire questo script utilizzando il primo Correre pulsante, funzionerebbe fino alla riga 10 e poi si fermerebbe. Una seconda pressione del Correre il pulsante completerebbe quindi lo script. Il secondo Correre Il pulsante esegue l'intero script senza prestare attenzione ai punti di interruzione. Il rosso Pulsante di arresto esce dal debugger, il che è utile se lo hai aperto per sbaglio o hai terminato la sessione di debug. IL Ripetere Il pulsante reimposta tutto per eseguire nuovamente lo script (ad esempio, se desideri modificare la posizione di un punto di interruzione e quindi eseguire nuovamente il codice).
Compiti a casa
I compiti di questa settimana sono piuttosto leggeri. Voglio che tu configuri lo Script Editor, trovi il registro e inizi a giocare con JSL Debugger utilizzando alcuni degli script di esempio dalla documentazione. Dai un'occhiata a quali variabili compaiono nelle schede in basso a sinistra della finestra del debugger. Inoltre, trova il Tronco d'albero scheda in basso a destra (così sai dove si trova).
La prossima settimana entreremo nell'ultima parte della "codificazione" che tratteremo questa serie .