Alfred Debugging

Peu importe la précision avec laquelle le code est écrit, des problèmes devront être résolus. L'art de supprimer les erreurs de programmation s'appelle le débogage. Depuis qu'Alfred exécute des scripts dans un processus de sous-shell, le débogage prend un nouveau niveau de difficulté.

Dans ce tutoriel, je vais vous montrer comment déboguer vos scripts Alfred. Si vous êtes nouveau dans Alfred, vous pouvez vous renseigner sur la création de scripts dans Alfred pour les utilisateurs débutants, intermédiaires et avancés. Ces tutoriels vous aideront à créer rapidement des flux de travail Alfred. Mais puisque vous êtes humain, il y a forcément quelques erreurs dans les scripts. Il est temps de chasser les insectes.

L'exemple de script est une version endommagée de Todo Workflow permettant d'utiliser TaskPaper avec Alfred. Il n'est pas nécessaire que TaskPaper utilise ce flux de travail. Vous pouvez configurer n’importe quel éditeur de texte pour éditer vos tâches. Toutes les tâches sont conservées dans un fichier texte brut. La copie brisée est dans le téléchargement pour ce tutoriel. Téléchargez et installez-le pour suivre le tutoriel.

Débogage en ligne de commande

Quand un script Alfred meurt, souvent, vous ne le savez pas, à part le fait que l'effet que vous vouliez ne s'est pas produit. Pour un Filtre de script, un bogue dans le script va vous jeter dans les recherches par défaut sans aucune explication.

Recherche par défaut depuis un buggy Filtre de script

Quand vous tapez t: showjournal dans l'invite Alfred, voici ce que vous obtiendrez. En regardant simplement à ce niveau, il est impossible de savoir quel est le problème. Les scripts étant exécutés dans un shell de sous-processus, vous ne pouvez tout simplement pas voir les résultats. Par conséquent, le script doit être exécuté sur la ligne de commande pour tout afficher..

Ouverture du répertoire de workflow

Pour que le script soit exécuté correctement, il doit être exécuté dans le répertoire de flux de travail, comme cela se ferait dans Alfred. Ouvrez le Filtre de script qui doit être débogué et copier le script. Le bouton sous le script intitulé Ouvrir le dossier de workflow ouvrira une fenêtre Finder (ou Path Finder) dans le répertoire nécessaire à l'exécution du script.


Ouverture du répertoire de flux de travail dans le Finder ou le Findeur de chemin

C'est là que le script doit être exécuté. Ce chemin est difficile à trouver. Un moyen simple d’ouvrir un terminal est d’utiliser un flux de travail Alfred!

TerminalFinder utilisant la commande Finder to Terminal

Pour ouvrir le répertoire dans un terminal, vous pouvez utiliser Alfred Workflow TerminalFinder pour ouvrir un répertoire Finder ou Path Finder dans une session de terminal (ou iTerm). Dactylographie pi ouvrira un terminal dans le répertoire à partir d'une fenêtre du Finder.

TerminalFinder en utilisant Path Finder to Terminal Command

Dactylographie pt ouvrira un terminal dans le répertoire à partir d'une fenêtre Path Finder.

Répertoire de flux de travail dans le terminal

Vous allez vous retrouver avec une fenêtre de terminal ouverte sur le répertoire. Remarquez le long chemin en bleu. Ce serait impossible de s'en souvenir et d'y naviguer à la main! Utilisez un éditeur de texte pour créer un fichier à cet emplacement appelé testing.php et collez le script dessus. Vous devez ajouter sur la ligne la plus haute pour que l'interprète PHP interprète correctement le script.

Vous devez également supprimer le question Alfred macro puisque l’interprète PHP ne saura pas quoi en faire. Alfred traduit cette macro en chaîne à l'invite Alfred avant de transmettre le script à l'interpréteur PHP..

Une fois ces modifications apportées, vous pouvez tester le script en tapant:

php testing.php

Cela exécutera le script et le résultat sera visible dans la fenêtre du terminal..

Le script défectueux a couru sur la ligne de commande

Oui, il s'est écrasé bien. Vous verrez dans la sortie qu'une variable n'est pas définie et que le fuseau horaire de la fonction de date n'a pas été défini. Ce réglage de fuseau horaire tue un grand nombre de scripts PHP dans Alfred!

Vous pouvez facilement déboguer vos scripts de cette façon, mais cela implique un long processus qui est voué à créer plus de bogues que de résoudre. Si vous oubliez d'ajouter le préambule PHP ou de supprimer la macro Alfred, le débogage deviendra un processus plus difficile. Ce qu’il faut, c’est un moyen d’obtenir ces informations de l’intérieur d’Alfred!

Alfred Debugger

Depuis la version 2.2 d'Alfred, Alfred permet maintenant ce type de débogage. Dans la zone de conception du flux de travail, appuyez sur le bouton punaise graphique dans le coin supérieur droit de la zone de conception et sélectionnez le bloc que vous souhaitez déboguer. Le débogueur s'ouvre en bas.

Alfred Debugger

Vous pouvez configurer le débogueur pour afficher uniquement Erreurs et avertissements, ou vous pouvez le configurer pour montrer Toutes les informations. Le mettre à Toutes les informations vous donnera le plus d'informations.

Message d'erreur dans Alfred Debugger

Lorsque vous exécutez le t: showjournal commande maintenant, vous verrez exactement les mêmes informations que celles trouvées sur la ligne de commande. Beaucoup plus facile! Maintenant pour la chasse aux insectes!

[ERREUR: alfred.workflow.input.scriptfilter] Code 0: Avis de PHP: Variable non définie: journaldir dans le code de ligne de commande, ligne 11 ls: /*.txt: Aucun fichier ou répertoire de ce type Avertissement: Date (): Non. sûr de s’appuyer sur les paramètres de fuseau horaire du système. Vous êtes * obligé * d'utiliser le paramètre date.timezone ou la fonction date_default_timezone_set (). Si vous utilisez l'une de ces méthodes et que vous recevez toujours cet avertissement, vous avez probablement mal orthographié l'identificateur de fuseau horaire. Nous avons sélectionné le fuseau horaire 'UTC' pour l'instant, mais veuillez définir date.timezone pour choisir votre fuseau horaire. dans Code de ligne de commande, ligne 12 [ERREUR: alfred.workflow.input.scriptfilter] Erreur d'analyse XML 'L'opération n'a pas pu être terminée. (Erreur 4. de NSXMLParserErrorDomain.) '. Ligne (null), Col (null): "Le document est vide" en XML: Remarque: Variable non définie: journaldir dans Code de ligne de commande, ligne 11 Avertissement: date (): Vous ne pouvez pas vous fier aux paramètres de fuseau horaire du système. Vous êtes * obligé * d'utiliser le paramètre date.timezone ou la fonction date_default_timezone_set (). Si vous utilisez l'une de ces méthodes et que vous recevez toujours cet avertissement, vous avez probablement mal orthographié l'identificateur de fuseau horaire. Nous avons sélectionné le fuseau horaire 'UTC' pour l'instant, mais veuillez définir date.timezone pour choisir votre fuseau horaire. dans le code de ligne de commande à la ligne 12 

À partir de la sortie ci-dessus dans Alfred Debugger, vous pouvez voir qu'il y a deux problèmes:

  1. La ligne 11 a une variable, journaldir, c'est indéfini. C'est indéfini parce que c'est supposé être journalDir. Le nom mal saisi du nom de variable est la cause de nombreux bogues de programme.
  2. le rendez-vous amoureux() Cette fonction nécessite que le fuseau horaire soit défini. Pour le supprimer, il vous suffit de définir le fuseau horaire. Toutefois, étant donné qu’il n’est pas nécessaire d’indiquer avec précision l’heure pour la fonctionnalité de la fonction de date, il serait beaucoup plus facile d’ignorer l’erreur. Vous pouvez dire à PHP de l’ignorer en ajoutant error_reporting (0); au sommet du script.

Une fois ces deux domaines fixés, le Filtre de script fonctionne maintenant comme prévu!

Pointe: Les variables d’environnement sont un autre domaine qui crée des problèmes avec les scripts Alfred. Alfred exécute les scripts rapidement, sans shell de connexion. Cela signifie que le processeur shell n'exécute pas les scripts de démarrage (c'est-à-dire: .bashrc pour un shell bash ou .zshrc pour un shell zsh). Par conséquent, les chemins d'accès aux exécutables et aux autres variables d'environnement ne sont pas définis correctement. Vous devez en tenir compte lors de l'écriture de vos scripts et de leur débogage..

Affichage des sorties de bloc

Non seulement les problèmes peuvent être débogués, mais le débogueur peut montrer ce que chaque bloc passe au bloc suivant. Créer des données à voir en utilisant t: nouveaujournal créer un nouveau journal appelé médical.

Activez le débogueur et sélectionnez le t: faire commander. Dans l'invite Alfred, tapez t: faire. Cela vous donnera un choix de revues pour ajouter une entrée. Sélectionnez le medical.txt journal et tapez le message J'ai eu le vertige.

Sortie de la t: faire Commander

Pressage Revenir, ce qui précède est envoyé au débogueur. Il montre ce que le bloc a envoyé au bloc suivant. C'est un moyen pratique de voir comment fonctionne un flux de travail. C’est aussi un excellent moyen de s’assurer que le bloc envoie ce que vous pensez qu’il devrait envoyer..

Passer à travers une machine à états

Dans Alfred Workflows for Advanced, l'écriture de machines d'état dans le Filtre de script des blocs ont été explorés. Afin de déboguer correctement une machine à états, il est nécessaire de voir l'état actuel. Vous pouvez explorer cela dans le t: addweekdaytask commander.

Un echo “Etat actuel: $ opt \ n”; la ligne a été ajoutée au script du t: addweekdaytask Filtre de script pour montrer quel est l'état actuel. Normalement, le débogueur n’affiche que la sortie XML du fichier Filtre de script s'il y a un problème. Etant donné que l'écho de l'état sur la sortie va casser le formatage XML, il affichera cette information.

Regarder la sortie d'une machine d'état - Etat 1

En tappant t: addweekdaytask dans l'invite Alfred produit la sortie ci-dessus dans le débogueur. le écho instruction indique qu'il est dans le premier état et affiche la sortie XML. Vous pouvez vérifier que le fichier xml semble correct et si le script l'a correctement formaté.

Regarder la sortie de la machine d'état - Etat 2

En tappant t: addweekdaytask Tue |, le débogueur montre qu'il est dans l'état 2 et le xml pour cet état.

Développements futurs

Parler avec Andrew, le créateur d’Alfred, a révélé que de nouvelles fonctionnalités étaient ajoutées au débogage continuellement. De nombreux participants aux forums d'Alfred apportent des idées. Andrew envisage d’ajouter l’affichage de toutes les sorties XML depuis un Filtre de script, pas seulement quand il bombarde. Il ajoute également un Copie bouton pour copier la sortie dans le presse-papier.

Conclusion

Comme chaque bogue est différent, il n’ya aucun moyen de montrer comment déboguer chaque type de problème. Avec le débogueur Alfred, cependant, vous pouvez maintenant voir les choses qui ont été dissimulées dans l'exécution des scripts par le sous-processus. 

En utilisant cet outil, vous pouvez maintenant définir et trouver ces bugs embêtants!