Indipendentemente dal modo in cui il codice viene scritto con attenzione, appariranno dei problemi che devono essere risolti. L'arte di rimuovere gli errori di programmazione si chiama debugging. Poiché Alfred esegue gli script in un processo sub-shell, il debug assume un nuovo livello di complessità.
In questo tutorial ti mostrerò come eseguire il debug dei tuoi script Alfred. Se sei nuovo in Alfred, potresti voler controllare la creazione di script in Alfred per principianti, intermedi e utenti avanzati. Questi tutorial ti metteranno al passo con la creazione di Alfred Workflow. Ma dal momento che sei umano, sei destinato ad avere alcuni errori negli script. È tempo di una caccia agli insetti.
Lo script di esempio è una versione non funzionante di Todo Workflow per l'utilizzo di TaskPaper con Alfred. Non è necessario avere TaskPaper per utilizzare questo flusso di lavoro. Puoi impostare qualsiasi editor di testo per modificare le tue attività. Tutte le attività sono conservate in un file di testo normale. La copia rotta è nel download per questo tutorial. Scaricalo e installalo per seguire il tutorial.
Quando uno script Alfred muore, spesso non lo sai, tranne per il fatto che l'effetto che volevi non accadeva. Per un Script Filter, un bug nello script ti scaricherà nelle ricerche di default senza alcuna spiegazione.
Ricerca predefinita da un buggy Script FilterQuando scrivi t: showjournal nel prompt di Alfred, questo è ciò che otterrai. Basta guardare questo livello, è impossibile sapere quale sia il problema. Poiché gli script vengono eseguiti in una shell di sottoprocesso, non puoi vedere i risultati. Pertanto, lo script deve essere eseguito sulla riga di comando per vedere qualcosa.
Apertura della directory del flusso di lavoroPer la corretta esecuzione dello script, deve essere eseguito nella directory del flusso di lavoro esattamente come sarebbe fatto all'interno di Alfred. Apri il Script Filter che deve essere eseguito il debug e copiare lo script. Il pulsante sotto lo script etichettato Aprire la cartella del flusso di lavoro aprirà una finestra Finder (o Path Finder) nella directory necessaria per eseguire lo script.
Questo è dove lo script deve essere eseguito. Questo percorso è difficile da trovare. Un modo semplice per aprire un terminale è utilizzare un flusso di lavoro Alfred!
TerminalFinder utilizzando il Finder al comando del terminalePer aprire la directory in una shell di terminale, è possibile utilizzare Alfred Workflow TerminalFinder per aprire una directory Finder o Path Finder in una sessione terminale (o iTerm). Digitando ft aprirà un terminale nella directory da una finestra del Finder.
TerminalFinder utilizzando Path Finder al comando del terminaleDigitando pt aprirà un terminale nella directory da una finestra di Path Finder.
Directory del flusso di lavoro nel terminaleFinirai con una finestra di terminale aperta alla directory. Notare il lungo percorso in blu. Sarebbe impossibile da ricordare e navigare lì a mano! Utilizzare un editor di testo per creare un file in quella posizione chiamata testing.php e incollare lo script in esso. Devi aggiungere sulla riga più in alto per l'interprete PHP per interpretare correttamente lo script.
È inoltre necessario rimuovere il Interrogazione Macro Alfred poiché l'interprete PHP non saprà cosa farne. Alfred traduce quella macro nella stringa sul prompt Alfred prima di passare lo script all'interprete PHP.
Una volta apportate queste modifiche, puoi testare lo script digitando:
php testing.php
Ciò eseguirà lo script e l'output verrà visualizzato nella finestra Terminale.
Script difettoso eseguito su riga di comandoSì, si è schiantato bene. Dall'output vedrai che una variabile non è definita e il fuso orario per la funzione data non è stato impostato. L'impostazione del fuso orario uccide un numero elevato di script PHP in Alfred!
Puoi facilmente eseguire il debug dei tuoi script in questo modo, ma comporta un lungo processo che è destinato a creare più bug che a risolverli. Se si dimentica di aggiungere il preambolo PHP o rimuovere la macro Alfred, il debug diventerà un processo più difficile. Quello di cui c'è bisogno è un modo per ottenere queste informazioni dall'interno di Alfred!
Dalla versione 2.2 di Alfred, Alfred ora consente questo tipo di debug. Nell'area di progettazione del flusso di lavoro, premere insetto grafica nell'angolo in alto a destra dell'area di disegno e selezionare il blocco che si desidera eseguire il debug. Il debugger si apre in basso.
Alfred DebuggerÈ possibile impostare il debugger per mostrare solo Errori e avvertenze, oppure puoi impostarlo per mostrare Tutte le informazioni. Impostandolo a Tutte le informazioni ti darà più informazioni.
Messaggio di errore in Alfred DebuggerQuando esegui il t: showjournal comando ora, vedrai la stessa identica informazione che è stata trovata sulla riga di comando. Molto più facile! Ora per la caccia al bug!
[ERRORE: alfred.workflow.input.scriptfilter] Codice 0: PHP Avviso: Variabile non definita: journaldir in Codice riga di comando sulla riga 11 ls: /*.txt: Nessun file o directory di questo tipo PHP Attenzione: data (): Non è sicuro affidarsi alle impostazioni del fuso orario del sistema. Sei * richiesto * per utilizzare l'impostazione date.timezone o la funzione date_default_timezone_set (). Nel caso in cui hai usato uno di questi metodi e ricevi ancora questo avviso, molto probabilmente hai sbagliato a digitare l'identificatore del fuso orario. Abbiamo selezionato il fuso orario 'UTC' per ora, ma per favore seleziona date.timezone per selezionare il tuo fuso orario. in Command line code on line 12 [ERRORE: alfred.workflow.input.scriptfilter] Errore di analisi XML 'Impossibile completare l'operazione. (Errore NSXMLParserErrorDomain 4.) '. Riga (null), Col (null): 'Il documento è vuoto' in XML: Avviso: Variabile non definita: journaldir in Codice riga di comando sulla riga 11 Avviso: date (): Non è sicuro fare affidamento sulle impostazioni del fuso orario del sistema. Sei * richiesto * per utilizzare l'impostazione date.timezone o la funzione date_default_timezone_set (). Nel caso in cui hai usato uno di questi metodi e ricevi ancora questo avviso, molto probabilmente hai sbagliato a digitare l'identificatore del fuso orario. Abbiamo selezionato il fuso orario 'UTC' per ora, ma per favore seleziona date.timezone per selezionare il tuo fuso orario. in Command line code on line 12
Dall'output sopra riportato in Alfred Debugger, puoi vedere che ci sono due problemi:
Una volta che queste due aree sono state fissate, il Script Filter ora funziona come previsto!
Mancia: Un'altra area che crea problemi con gli script Alfred sono le variabili di ambiente. Alfred esegue gli script rapidamente, senza una shell di login. Ciò significa che il processore di shell non esegue gli script di avvio (ad esempio: .bashrc per una shell bash o .zshrc per una shell zsh). Pertanto, i percorsi per i file eseguibili e altre variabili di ambiente non sono impostati correttamente. Devi tenerne conto quando scrivi i tuoi script e fai il debugging.
Non solo i problemi possono essere risolti, ma il debugger può mostrare ciò che ogni blocco passa al blocco successivo. Crea alcuni dati da vedere usando t: newjournal per creare un nuovo diario chiamato medico.
Attiva il debugger e seleziona il t: fare comando. Nel prompt Alfred, digitare t: fare. Ti darà una scelta di riviste per aggiungere una voce. Seleziona il medical.txt giornale e digitare il messaggio Sono stato molto stordito.
Uscita del t: fare Comandourgente Ritorno, quanto sopra viene emesso per il debugger. Mostra ciò che il blocco ha inviato al blocco successivo. Questo è un modo pratico per vedere come funziona un flusso di lavoro. È anche un ottimo modo per assicurarsi che il blocco invii ciò che pensi debba essere inviato.
In Alfred Workflow for Advanced, scrivendo macchine a stati nel Script Filter i blocchi sono stati esplorati. Per eseguire correttamente il debug di una macchina a stati, è necessario vedere lo stato corrente. Puoi esplorare questo nel t: addweekdaytask comando.
Un echo "Stato attuale: $ opt \ n"; linea è stata aggiunta alla sceneggiatura di t: addweekdaytask Script Filter per mostrare qual è lo stato attuale. Normalmente, il debugger mostra solo l'output xml del file Script Filter se ha un problema Poiché l'echo dello stato sull'output interromperà la formattazione xml, visualizzerà tali informazioni.
Guardando a un output macchina statale - Stato 1Digitando t: addweekdaytask nel prompt Alfred produce l'output sopra nel debugger. Il eco l'istruzione dice che è nel primo stato e mostra l'output xml. Puoi verificare che l'xml sia corretto e che lo script lo abbia formattato correttamente.
Guardando l'output della macchina di stato - stato 2Digitando t: addweekdaytask Tue |, il debugger mostra che è nello stato 2 e l'xml per quello stato.
Parlando con Andrew, il creatore di Alfred, ha rivelato che nuove creature vengono continuamente aggiunte al debugger. Molti partecipanti al forum di Alfred stanno contribuendo con idee. Andrew sta pianificando di aggiungere la visualizzazione di tutti gli output xml da a Script Filter, non solo quando bombarda. Sta anche aggiungendo a copia pulsante per copiare l'output negli Appunti.
Poiché ogni bug è diverso, non c'è modo di mostrare come eseguire il debug di ogni tipo di problema. Con il debugger Alfred, tuttavia, ora puoi vedere le cose che sono state nascoste nell'esecuzione del processo secondario degli script.
Usando questo strumento, ora puoi impostare e trovare quei fastidiosi bug!