Indiferent de cât de greu este scris codul, apar probleme care trebuie rezolvate. Arta de a elimina erorile de programare se numește debugging. Din moment ce Alfred execută scripturi într-un proces sub-shell, depanarea are un nou nivel de înșelătorie.
În acest tutorial vă voi arăta cum să depanați scripturile Alfred. Dacă sunteți nou la Alfred, ați putea dori să verificați scrierea de scripturi în Alfred pentru începători, intermediari și utilizatori avansați. Aceste tutoriale vă vor ajuta să creați fluxuri de lucru Alfred. Dar din moment ce sunteți om, sunteți obligați să aveți câteva erori în scenariile. E timpul pentru o vânătoare de bug-uri.
Scriptul exemplu este o versiune ruptă a fluxului de lucru Todo pentru utilizarea TaskPaper cu Alfred. Nu trebuie să aveți TaskPaper să utilizeze acest flux de lucru. Puteți configura orice editor de text pentru a vă edita sarcinile. Toate sarcinile sunt păstrate într-un fișier text simplu. Copia ruptă este în descărcare pentru acest tutorial. Descărcați și instalați-l pentru a urma tutorialul.
Când un script al lui Alfred moare, de multe ori nu știți despre el, cu excepția faptului că efectul dorit nu sa întâmplat. Pentru o Filtru de scripturi, o eroare în script vă va duce în căutările implicite fără nicio explicație.
Căutarea standard de la un buggy Filtru de scripturiCând tastați T: showjournal în cererea lui Alfred, acesta este ceea ce veți obține. Privind doar la acest nivel, este imposibil să știți care este problema. Deoarece scripturile sunt executate într-o coajă de subproces, nu puteți vedea rezultatele. Prin urmare, scriptul trebuie să fie rulat pe linia de comandă pentru a vedea ceva.
Deschiderea directorului fluxului de lucruPentru executarea corectă a scriptului, acesta trebuie executat în directorul fluxului de lucru la fel cum ar fi făcut în interiorul lui Alfred. Deschide Filtru de scripturi care trebuie să fie depanat și să copiați scenariul. Butonul de sub scriptul etichetat Deschideți dosarul fluxului de lucru va deschide o fereastră Finder (sau Finder Path) în directorul necesar pentru executarea scriptului.
Acesta este locul unde scriptul trebuie executat. Această cale este greu de găsit. O modalitate ușoară de a deschide un terminal este utilizarea unui flux de lucru Alfred!
TerminalFinder folosind Finder pentru a comanda terminalPentru a deschide directorul într-un shell terminal, puteți utiliza Alfred Workflow TerminalFinder pentru a deschide un director Finder sau Path Finder într-o sesiune terminal (sau iTerm). Tastare ft va deschide un terminal din directorul dintr-o fereastră Finder.
TerminalFinder folosind calea Finder pentru a Terminal CommandTastare pt va deschide un terminal din directorul dintr-o fereastră Finder Path.
Director de flux de lucru în TerminalVeți ajunge cu o fereastră Terminal deschisă în director. Observați calea lungă în albastru. Ar fi imposibil să-ți amintești și să navighezi acolo cu mâna! Utilizați un editor de text pentru a crea un fișier în acea locație numit testing.php și lipiți scenariul în el. Trebuie să adăugați pe linia de sus a liniei interpretului PHP pentru a interpreta corect scenariul.
De asemenea, trebuie să eliminați Interogare Alfred macro, deoarece interpretul PHP nu va ști ce să facă cu el. Alfred traduce acea macrocomandă șirului din prompterul Alfred înainte de a trece scriptul la interpretul PHP.
Odată ce aceste modificări au fost făcute, puteți testa scriptul tastând:
php testing.php
Acesta va rula scriptul, iar ieșirea va fi văzută în fereastra Terminal.
Scriptul defect a dispărut pe linia de comandăDa, sa prăbușit bine. Veți vedea de la ieșire că o variabilă nu este definită și fusul orar pentru funcția de dată nu a fost setat. Setarea fusului orar omoară un număr mare de scripturi PHP în Alfred!
Puteți depana cu ușurință script-urile dvs. în acest fel, dar implică un proces lung, care este obligat să creeze mai multe bug-uri decât să rezolve. Dacă uitați să adăugați preambulul PHP sau să eliminați macro-ul Alfred, depanarea va deveni un proces mai dificil. Este nevoie de o modalitate de a ajunge la aceste informații din interiorul lui Alfred!
Din versiunea 2.2 a lui Alfred, Alfred permite acum acest tip de depanare. În zona de proiectare a fluxului de lucru, apăsați pe gândac grafică în colțul din dreapta sus al zonei de proiectare și selectați blocul pe care doriți să îl depanați. Debuggerul se deschide în partea de jos.
Alfred DebuggerPuteți seta depanatorul să se afișeze doar Erori și avertismente, sau puteți seta să se afișeze Toate informațiile. Setarea la Toate informațiile vă va oferi cele mai multe informații.
Mesaj de eroare în Alfred DebuggerCând rulați T: showjournal comanda acum, veți vedea exact aceleași informații care au fost găsite pe linia de comandă. Mult mai ușor! Acum pentru vânătoarea de bug-uri!
[ERROR: alfred.workflow.input.scriptfilter] Cod 0: Notă PHP: Variabila nedefinită: journaldir în codul liniei de comandă pe linia 11 ls: /*.txt: Niciun astfel de fișier sau director PHP Avertisment: date (): Nu este sigur să vă bazați pe setările pentru fusul orar al sistemului. Sunteți * necesar * pentru a utiliza setarea date.timezone sau funcția date_default_timezone_set (). În cazul în care ați utilizat oricare dintre aceste metode și dacă primiți în continuare acest avertisment, cel mai probabil ați introdus greșit codul de identificare al zonei de fus orar. Am selectat fusul orar "UTC" pentru moment, dar vă rugăm să setați data.timezone pentru a selecta fusul orar. în linia de comandă pe linia 12 [EROARE: alfred.workflow.input.scriptfilter] Eroare parsare XML "Operația nu a putut fi terminată. (Eroare NSXMLParserErrorDomain 4.) '. Row (null), Col (null): "Documentul este gol" în XML: Notă: Variabila nedefinită: journaldir în Codul liniei de comandă pe linia 11 Avertisment: date (): Nu este sigur să se bazeze pe setările fusului orar al sistemului. Sunteți * necesar * pentru a utiliza setarea date.timezone sau funcția date_default_timezone_set (). În cazul în care ați utilizat oricare dintre aceste metode și dacă primiți în continuare acest avertisment, cel mai probabil ați introdus greșit codul de identificare al zonei de fus orar. Am selectat fusul orar "UTC" pentru moment, dar vă rugăm să setați data.timezone pentru a selecta fusul orar. în linia de comandă pe linia 12
Din ieșirea de mai sus din Alfred Debugger, puteți vedea că există două probleme:
Odată ce aceste două zone sunt fixate, Filtru de scripturi acum ruleaza dupa cum era de asteptat!
Bacsis: O altă zonă care creează probleme cu scripturile Alfred sunt variabilele de mediu. Alfred execută scripturile rapid, fără o coajă de conectare. Ce înseamnă acest procesor de shell nu rulează scripturile de pornire (adică: .bashrc pentru o coajă bash sau .zshrc pentru o coajă zsh). Prin urmare, căile spre executabile și alte variabile de mediu nu sunt setate corect. Trebuie să țineți cont de acest lucru atunci când scrieți scripturile și le depanați.
Nu numai problemele pot fi depanatate, dar debuggerul poate arata ceea ce fiecare bloc trece la urmatorul bloc. Creați câteva date pentru a le vedea utilizând T: newjournal pentru a crea un jurnal nou numit medical.
Activați depanatorul și selectați T: face comanda. În promptul Alfred, tastați T: face. Acesta vă va oferi o gamă de jurnale pentru a adăuga o intrare. Selectează medical.txt jurnal și introduceți mesajul Am fost foarte amețit.
Rezultatul T: face ComandaPresare Întoarcere, cele de mai sus sunt trimise la depanator. Afișează ce bloc a trimis la următorul bloc. Acesta este un mod la îndemână pentru a vedea cum funcționează un flux de lucru. Este, de asemenea, o modalitate foarte bună de a vă asigura că blocul trimite ceea ce credeți că ar trebui să trimită.
În fluxurile de lucru Alfred pentru Advanced, scrierea mașinilor de stare în Filtru de scripturi blocuri a fost explorat. Pentru a debuga corect o mașină de stat, este necesar să vedeți starea actuală. Puteți explora acest lucru în T: addweekdaytask comanda.
Un ecou "Starea curentă: $ opt \ n"; line a fost adăugat la scenariul T: addweekdaytask Filtru de scripturi pentru a arăta care este starea actuală. În mod normal, debuggerul arată doar ieșirea xml a Filtru de scripturi dacă are o problemă. Deoarece ecoua de stat la ieșire va rupe formatul xml, va afișa aceste informații.
Privind la o ieșire a mașinii de stat - stat 1Prin tastarea T: addweekdaytask în promptul Alfred produce ieșirea de mai sus în depanator. ecou instrucțiunea spune că este în prima stare și arată ieșirea xml. Puteți verifica dacă xml-ul arată corect și dacă script-ul este formatat corect.
Privind starea mașinii de stat - stat 2Prin tastarea t: addweekdaytask Tue |, debuggerul arată că acesta este în starea 2 și xml pentru acea stare.
Vorbind cu Andrew, creatorul Alfred, a arătat că se adaugă noile fecturi la depanator continuu. Mulți participanți la Forumul Alfred contribuie cu idei. Andrew intenționează să adauge afișarea tuturor ieșirilor xml de la a Filtru de scripturi, nu doar atunci când bombe. El adaugă și o Copie pentru a copia ieșirea în clipboard.
Deoarece fiecare eroare este diferită, nu există nicio modalitate de a arăta cum să depanem orice tip de problemă. Cu ajutorul programului de depanare Alfred, însă, puteți vedea acum lucrurile care au fost acoperite în execuția subproceselor scripturilor.
Folosind acest instrument, poți să stabilești acum și să găsești acele bug-uri plictisitoare!