Unabhängig davon, wie sorgfältig Code geschrieben wird, treten Probleme auf, die behoben werden müssen. Das Entfernen von Programmierfehlern wird als Debugging bezeichnet. Da Alfred Skripts in einem Sub-Shell-Prozess ausführt, nimmt das Debuggen eine neue Ebene der Kniffeligkeit an.
In diesem Tutorial zeige ich Ihnen, wie Sie Ihre Alfred-Skripts debuggen können. Wenn Sie Alfred noch nicht kennen, möchten Sie vielleicht die Erstellung von Skripten in Alfred für Anfänger, Fortgeschrittene und Fortgeschrittene prüfen. In diesen Lernprogrammen erfahren Sie, wie Sie Alfred Workflows erstellen. Aber da Sie ein Mensch sind, werden Sie sicherlich einige Fehler in den Skripten haben. Es ist Zeit für eine Fehlersuche.
Das Beispielskript ist eine fehlerhafte Version von Todo Workflow zur Verwendung von TaskPaper mit Alfred. Sie benötigen kein TaskPaper, um diesen Workflow verwenden zu können. Sie können einen beliebigen Texteditor einrichten, um Ihre Aufgaben zu bearbeiten. Alle Aufgaben werden in einer Klartextdatei gespeichert. Die beschädigte Kopie befindet sich im Download für dieses Tutorial. Laden Sie es herunter und installieren Sie es, um dem Tutorial zu folgen.
Wenn ein Alfred-Skript stirbt, wissen Sie oft nichts davon, außer der Tatsache, dass der gewünschte Effekt nicht eingetreten ist. Für ein Skriptfilter, Ein Fehler im Skript führt Sie ohne Erklärung in die Standard-Suchvorgänge.
Standardsuche aus einem fehlerhaften SkriptfilterWenn Sie tippen t: showjournal In der Alfred-Aufforderung erhalten Sie Folgendes. Wenn Sie nur dieses Niveau betrachten, ist es unmöglich zu wissen, was das Problem ist. Da Skripts in einer Subprozess-Shell ausgeführt werden, können Sie die Ergebnisse nur nicht sehen. Daher muss das Skript in der Befehlszeile ausgeführt werden, um etwas anzuzeigen.
Das Workflow-Verzeichnis öffnenFür die ordnungsgemäße Ausführung des Skripts muss es im Arbeitsablaufverzeichnis genauso ausgeführt werden, wie dies in Alfred der Fall wäre. Öffne das Skriptfilter das muss debuggen und das Skript kopieren. Die Schaltfläche unter dem Skript Workflow-Ordner öffnen öffnet ein Finder (oder Path Finder) Fenster in dem Verzeichnis, das zur Ausführung des Skripts benötigt wird.
Hier muss das Skript ausgeführt werden. Dieser Weg ist schwer zu finden. Eine einfache Möglichkeit, ein Terminal zu öffnen, besteht darin, einen Alfred-Workflow zu verwenden!
TerminalFinder mit Finder zum TerminalbefehlUm das Verzeichnis in einer Terminal-Shell zu öffnen, können Sie mit Alfred Workflow TerminalFinder ein Finder- oder Path Finder-Verzeichnis in einer Terminalsitzung (oder iTerm) öffnen. Tippen ft öffnet ein Terminal im Verzeichnis aus einem Finder-Fenster.
TerminalFinder über Path Finder to Terminal CommandTippen pt öffnet ein Terminal im Verzeichnis aus einem Path Finder-Fenster.
Workflow-Verzeichnis im TerminalAm Ende wird ein Terminalfenster für das Verzeichnis geöffnet. Beachten Sie den langen Weg in blau. Das wäre unmöglich, sich daran zu erinnern und von Hand zu navigieren! Verwenden Sie einen Texteditor, um an diesem Ort eine Datei zu erstellen testing.php und fügen Sie das Skript ein. Sie müssen hinzufügen in der obersten Zeile für den PHP-Interpreter, um das Skript richtig zu interpretieren.
Sie müssen auch das entfernen Abfrage Alfred Makro, da der PHP-Interpreter nicht weiß, was er damit machen soll. Alfred übersetzt dieses Makro in die Zeichenfolge der Alfred-Eingabeaufforderung, bevor das Skript an den PHP-Interpreter übergeben wird.
Sobald diese Änderungen vorgenommen wurden, können Sie das Skript testen, indem Sie Folgendes eingeben:
php testing.php
Dadurch wird das Skript ausgeführt und die Ausgabe wird im Terminalfenster angezeigt.
Fehlerhaftes Skript in der Befehlszeile ausgeführtJa, es ist gut abgestürzt. In der Ausgabe sehen Sie, dass keine Variable definiert ist und die Zeitzone für die Datumsfunktion nicht festgelegt wurde. Diese Zeitzoneneinstellung tötet eine große Anzahl von PHP-Skripts in Alfred!
Sie können Ihre Skripte auf diese Weise problemlos debuggen, aber dies erfordert einen langen Prozess, der mehr Fehler verursacht als löst. Wenn Sie vergessen, die PHP-Präambel hinzuzufügen oder das Alfred-Makro zu entfernen, wird das Debuggen schwieriger. Was benötigt wird, ist ein Weg, um diese Informationen aus Alfred heraus zu finden!
Seit Version 2.2 von Alfred erlaubt Alfred nun diese Art des Debugging. Drücken Sie im Workflow-Designbereich die Taste Fehler Grafik in der oberen rechten Ecke des Designbereichs und wählen Sie den Block aus, den Sie debuggen möchten. Der Debugger wird unten geöffnet.
Alfred DebuggerSie können den Debugger so einstellen, dass er nur angezeigt wird Fehler und Warnungen, oder Sie können es einstellen, um anzuzeigen Alle Informationen. Einstellen auf Alle Informationen gibt Ihnen die meisten Informationen.
Fehlermeldung in Alfred DebuggerWenn Sie das ausführen t: showjournal Wenn Sie jetzt den Befehl ausführen, sehen Sie genau die gleichen Informationen, die in der Befehlszeile gefunden wurden. Viel einfacher! Nun zur Fehlerjagd!
[ERROR: alfred.workflow.input.scriptfilter] Code 0: PHP Hinweis: Undefinierte Variable: journaldir in Befehlszeilencode in Zeile 11 ls: /*.txt: Keine solche Datei oder Verzeichnis PHP Warnung: date (): Dies ist nicht der Fall sicher auf die Zeitzoneneinstellungen des Systems verlassen. Sie sind * erforderlich *, um die Einstellung date.timezone oder die Funktion date_default_timezone_set () zu verwenden. Falls Sie eine dieser Methoden verwendet haben und diese Warnung immer noch angezeigt wird, haben Sie wahrscheinlich die Zeitzonen-ID falsch geschrieben. Wir haben vorerst die Zeitzone 'UTC' ausgewählt, aber stellen Sie mit date.timezone Ihre Zeitzone ein. in Befehlszeilencode in Zeile 12 [ERROR: alfred.workflow.input.scriptfilter] XML Parse Error 'Der Vorgang konnte nicht abgeschlossen werden. (NSXMLParserErrorDomain-Fehler 4.) '. Zeile (null), Col (null): 'Dokument ist leer' in XML: Hinweis: Undefinierte Variable: journaldir in Befehlszeilencode in Zeile 11 Warnung: date (): Es ist nicht sicher, sich auf die Zeitzoneneinstellungen des Systems zu verlassen. Sie sind * erforderlich *, um die Einstellung date.timezone oder die Funktion date_default_timezone_set () zu verwenden. Falls Sie eine dieser Methoden verwendet haben und diese Warnung immer noch angezeigt wird, haben Sie wahrscheinlich die Zeitzonen-ID falsch geschrieben. Wir haben vorerst die Zeitzone 'UTC' ausgewählt, aber stellen Sie mit date.timezone Ihre Zeitzone ein. in Befehlszeilencode in Zeile 12
Aus der obigen Ausgabe im Alfred Debugger können Sie erkennen, dass es zwei Probleme gibt:
Sobald diese beiden Bereiche fixiert sind, werden die Skriptfilter läuft jetzt wie erwartet!
Spitze: Ein weiterer Bereich, der Probleme mit Alfred-Skripts verursacht, sind die Umgebungsvariablen. Alfred führt die Skripte schnell und ohne Login-Shell aus. Das bedeutet, dass der Shell-Prozessor die Startskripts nicht ausführt (dh: .bashrc für eine Bash-Shell oder .zshrc für eine zsh-Shell). Daher werden die Pfade zu ausführbaren Dateien und anderen Umgebungsvariablen nicht ordnungsgemäß festgelegt. Sie müssen dies berücksichtigen, wenn Sie Ihre Skripts schreiben und debuggen.
Es können nicht nur Probleme debuggt werden, sondern der Debugger kann anzeigen, was jeder Block an den nächsten Block weitergibt. Erstellen Sie einige Daten, die Sie mit anzeigen können t: neujournal eine neue Zeitschrift mit dem Namen erstellen medizinisch.
Aktivieren Sie den Debugger und wählen Sie die Option t: tun Befehl. Geben Sie in die Aufforderung von Alfred ein t: tun. Sie erhalten eine Auswahl an Zeitschriften, um einen Eintrag hinzuzufügen. Wähle aus medizinisch.txt Journal und geben Sie die Nachricht ein Mir war sehr schwindelig.
Ausgabe des t: tun BefehlDrücken Rückkehr, Das obige wird an den Debugger ausgegeben. Es zeigt, was der Block an den nächsten Block gesendet hat. Auf diese Weise können Sie sehen, wie ein Workflow funktioniert. Dies ist auch eine großartige Möglichkeit, um sicherzustellen, dass der Block das sendet, was Sie Ihrer Meinung nach senden sollten.
In den Alfred Workflows für Fortgeschrittene schreiben Sie Zustandsautomaten in der Skriptfilter Blöcke wurde erforscht. Um eine Statusmaschine richtig zu debuggen, muss der aktuelle Status angezeigt werden. Sie können dies in der t: addweekdaytask Befehl.
Ein Echo "Aktueller Status: $ opt \ n"; Zeile wurde dem Skript der hinzugefügt t: addweekdaytask Skriptfilter um zu zeigen, wie der aktuelle Stand ist. Normalerweise zeigt der Debugger nur die XML-Ausgabe von Skriptfilter wenn es ein Problem hat Da die Ausgabe des Zustands in der Ausgabe die XML-Formatierung durchbricht, werden diese Informationen angezeigt.
Betrachten eines Zustands einer Maschinenmaschine - Zustand 1Durch Eingabe von t: addweekdaytask in der Alfred-Eingabeaufforderung erzeugt die obige Ausgabe im Debugger. Das Echo Anweisung sagt, dass es sich im ersten Zustand befindet und zeigt die XML-Ausgabe. Sie können überprüfen, ob die XML-Datei richtig aussieht und ob das Skript sie richtig formatiert hat.
Betrachten des Zustands der Maschinenausgabe - Zustand 2Durch Eingabe von t: addweekdaytask Di |, Der Debugger zeigt an, dass er sich im Status 2 befindet, und die XML-Datei für diesen Status.
Im Gespräch mit Andrew, dem Schöpfer von Alfred, wurde bekannt, dass dem Debugger ständig neue Funktionen hinzugefügt werden. Viele Alfred Forums-Teilnehmer bringen Ideen ein. Andrew plant, die Anzeige aller XML-Ausgaben von a hinzuzufügen Skriptfilter, nicht nur, wenn es bombardiert. Er fügt auch ein Kopieren Schaltfläche, um die Ausgabe in die Zwischenablage zu kopieren.
Da jeder Fehler anders ist, gibt es keine Möglichkeit zu zeigen, wie jedes Problem behoben werden kann. Mit dem Alfred-Debugger können Sie jedoch jetzt die Dinge sehen, die bei der Ausführung der Skripts im Unterprozess verdeckt wurden.
Mit diesem Tool können Sie diese lästigen Fehler jetzt ermitteln und finden!