Ongeacht hoe zorgvuldig code wordt geschreven, er verschijnen problemen die moeten worden opgelost. De kunst om programmeerfouten te verwijderen, wordt debugging genoemd. Aangezien Alfred scripts in een sub-shell-proces uitvoert, neemt het debuggen een nieuw niveau van trickiness op.
In deze zelfstudie laat ik zien hoe je je Alfred-scripts kunt debuggen. Als je nieuw bent bij Alfred, kun je het maken van scripts in Alfred for Beginners, Intermediates en Advanced-gebruikers bekijken. Deze tutorials helpen je bij het maken van Alfred Workflows. Maar aangezien u een mens bent, zult u vast wel een paar fouten in de scripts hebben. Het is tijd voor een bug-jacht.
Het voorbeeldscript is een gebroken versie van Todo Workflow voor het gebruik van TaskPaper met Alfred. U hoeft TaskPaper niet te gebruiken om deze workflow te gebruiken. U kunt elke teksteditor instellen om uw taken te bewerken. Alle taken worden bewaard in een eenvoudig tekstbestand. De kapotte kopie staat in de download voor deze zelfstudie. Download en installeer het om de zelfstudie te volgen.
Wanneer een Alfred-script sterft, weet je het vaak niet, behalve het feit dat het gewenste effect niet is gebeurd. Voor een Scriptfilter, een fout in het script dumpt u in de standaardzoekopdrachten zonder enige uitleg.
Standaardzoekopdracht vanuit een buggy ScriptfilterWanneer je typt t: showjournal in de Alfred-prompt, dit is wat je krijgt. Als we alleen naar dit niveau kijken, is het onmogelijk om te weten wat het probleem is. Aangezien scripts worden uitgevoerd in een subproces-shell, kunt u de resultaten gewoon niet zien. Daarom moet het script op de opdrachtregel worden uitgevoerd om iets te kunnen zien.
De workflow-map openenVoor de juiste uitvoering van het script moet het in de workflowdirectory worden uitgevoerd, net zoals het in Alfred zou gebeuren. Open de Scriptfilter dat moet worden gedebugd en kopieer het script. De knop onder het script met het label Open workflowmap opent een Finder (of Path Finder) venster in de map die nodig is om het script uit te voeren.
Dit is waar het script moet worden uitgevoerd. Dit pad is moeilijk te vinden. Een eenvoudige manier om een terminal te openen is om een Alfred-workflow te gebruiken!
TerminalFinder via Finder naar Terminal CommandOm de directory in een terminalshell te openen, kunt u de Alfred Workflow TerminalFinder gebruiken om een Finder- of Path Finder-map te openen in een terminalsessie (of iTerm). Typen ft opent een terminal in de map vanuit een Finder-venster.
TerminalFinder met Path Finder to Terminal CommandTypen pt opent een terminal in de map vanuit een Path Finder-venster.
Werkstroomdirectory in TerminalJe zult eindigen met een Terminal-venster open voor de map. Let op het lange pad in het blauw. Dat zou onmogelijk te onthouden zijn en er met de hand naartoe navigeren! Gebruik een teksteditor om een bestand op die locatie te maken met de naam testing.php en plak het script erin. Je moet toevoegen op de bovenste regel voor de PHP-interpreter om het script correct te interpreteren.
U moet ook de Zoekopdracht Alfred macro omdat de PHP-interpreter niet weet wat hij ermee moet doen. Alfred vertaalt die macro naar de tekenreeks op de vraag Alfred voordat het script wordt doorgegeven aan de PHP-interpreter.
Nadat deze wijzigingen zijn aangebracht, kunt u het script testen door het volgende te typen:
php testing.php
Dat zal het script uitvoeren en de uitvoer zal zichtbaar zijn in het Terminal-venster.
Defecte script-run op opdrachtregelJa, het crashte goed. U zult aan de uitgang zien dat een variabele niet is gedefinieerd en dat de tijdzone voor de datumfunctie niet is ingesteld. Die tijdzone-instelling doodt een groot aantal PHP-scripts in Alfred!
Je kunt je scripts eenvoudig op deze manier debuggen, maar het gaat om een lang proces dat meer fouten zal veroorzaken dan oplossen. Als u vergeet de PHP-inleiding toe te voegen of de Alfred-macro te verwijderen, wordt het debuggen een moeilijker proces. Wat nodig is, is een manier om deze informatie van binnenuit Alfred te bereiken!
Sinds versie 2.2 van Alfred staat Alfred nu dit type foutopsporing toe. Druk in het gebied voor werkstroomontwerp op kever afbeelding in de rechterbovenhoek van het ontwerpgebied en selecteer het blok dat u wilt debuggen. De debugger wordt onderaan geopend.
Alfred DebuggerU kunt instellen dat de foutopsporing alleen wordt weergegeven Fouten en waarschuwingen, of je kunt het instellen om te laten zien Alle informatie. Instellen op Alle informatie zal je de meeste informatie geven.
Foutbericht in Alfred DebuggerWanneer u de t: showjournal opdracht nu, ziet u exact dezelfde informatie die is gevonden op de opdrachtregel. Veel makkelijker! Nu voor de bug-jacht!
[ERROR: alfred.workflow.input.scriptfilter] Code 0: PHP Notice: Undefined variable: journaldir in Command line code op regel 11 ls: /*.txt: Geen bestand of map PHP Waarschuwing: date (): It is not veilig om te vertrouwen op de tijdzone-instellingen van het systeem. U bent * verplicht * om de datum.tijdzone-instelling of de functie date_default_timezone_set () te gebruiken. Als u een van deze methoden heeft gebruikt en deze waarschuwing nog steeds wordt weergegeven, heeft u waarschijnlijk de identificatie van de tijdzone verkeerd gespeld. We hebben voorlopig de tijdzone 'UTC' geselecteerd, maar stel date.timezone in om uw tijdzone te selecteren. in Command line code op regel 12 [ERROR: alfred.workflow.input.scriptfilter] XML parse Error 'De bewerking kon niet worden voltooid. (NSXMLParserErrorDomain-fout 4.) '. Row (null), Col (null): 'Document is leeg' in XML: Opmerking: Ongedefinieerde variabele: journaldir in opdrachtregelcode op regel 11 Waarschuwing: date (): het is niet veilig om te vertrouwen op de tijdzone-instellingen van het systeem. U bent * verplicht * om de datum.tijdzone-instelling of de functie date_default_timezone_set () te gebruiken. Als u een van deze methoden heeft gebruikt en deze waarschuwing nog steeds wordt weergegeven, heeft u waarschijnlijk de identificatie van de tijdzone verkeerd gespeld. We hebben voorlopig de tijdzone 'UTC' geselecteerd, maar stel date.timezone in om uw tijdzone te selecteren. in Commandoregelcode op regel 12
Uit de bovenstaande uitvoer in de Alfred Debugger, kunt u zien dat er twee problemen zijn:
Zodra deze twee gebieden zijn opgelost, is de Scriptfilter draait nu zoals verwacht!
Tip: Een ander gebied dat problemen veroorzaakt met Alfred-scripts zijn de omgevingsvariabelen. Alfred voert de scripts snel uit, zonder inlogshell. Wat dat betekent is dat de shell-processor de opstartscripts niet uitvoert (dat wil zeggen: .bashrc voor een bash-shell of .zshrc voor een zsh-shell). Daarom zijn de paden naar uitvoerbare bestanden en andere omgevingsvariabelen niet correct ingesteld. Je moet hiermee rekening houden bij het schrijven van je scripts en het debuggen ervan.
Niet alleen kunnen problemen worden debugged, maar de debugger kan ook laten zien wat elk blok doorgeeft aan het volgende blok. Maak wat gegevens om te zien door te gebruiken t: newjournal om een nieuw dagboek te maken met de naam medisch.
Activeer de foutopsporing en selecteer de t: doen commando. Typ in de Alfred-prompt t: doen. U krijgt de keuze uit tijdschriften om een vermelding toe te voegen. Selecteer de medical.txt journaal en typ het bericht Ik ben erg duizelig geweest.
Output van de t: doen Commandopersing terugkeer, het bovenstaande wordt uitgevoerd naar de debugger. Het laat zien wat het blok naar het volgende blok stuurde. Dit is een handige manier om te zien hoe een workflow werkt. Het is ook een goede manier om ervoor te zorgen dat het blok verzendt wat je denkt te verzenden.
In de Alfred Workflows for Advanced schrijven staatstoestellen in de Scriptfilter blokken werden onderzocht. Om een statusmachine correct te debuggen, is het noodzakelijk om de huidige status te zien. Je kunt dit verkennen in de t: addweekdaytask commando.
Een echo "Huidige status: $ opt \ n"; regel was toegevoegd aan het script van de t: addweekdaytask Scriptfilter om te laten zien wat de huidige staat is. Normaal toont de debugger alleen de xml-uitvoer van de Scriptfilter als het een probleem heeft. Aangezien echo van de status naar de uitvoer de xml-opmaak zal doorbreken, zal het die informatie weergeven.
Kijken naar een machine-uitgang van een staat - status 1Door te typen t: addweekdaytask in de prompt Alfred produceert de bovenstaande uitvoer in de foutopsporing. De echo statement vertelt dat het in de eerste staat is en de xml-uitvoer toont. U kunt controleren of de xml er goed uitziet en of het script de juiste indeling heeft.
Kijken naar de machinale output van de staat - status 2Door te typen t: addweekdaytask Tue |, de debugger laat zien dat het in staat 2 is en de xml voor die staat.
In gesprek met Andrew, de maker van Alfred, bleek dat er voortdurend nieuwe feactures aan de debugger worden toegevoegd. Veel Alfred Forums-deelnemers dragen ideeën aan. Andrew is van plan om de weergave van alle XML-uitvoer van een toe te voegen Scriptfilter, niet alleen wanneer het bomt. Hij voegt ook een toe Kopiëren om de uitvoer naar het klembord te kopiëren.
Omdat elke bug anders is, is er geen manier om te laten zien hoe elk type probleem te debuggen. Met de Alfred-debugger kunt u nu echter de dingen zien die werden gedekt in de uitvoering van de scripts in het subproces.
Met behulp van deze tool kun je nu die vervelende bugs ontdekken en vinden!