Ei bine, din punct de vedere tehnic, Xdebug este o extensie pentru PHP pentru a vă ușura viața în timpul depanării codului. În acest moment, puteți fi folosit pentru depanarea codului dvs. cu diverse alte soluții simple. Acestea includ utilizarea ecou
declarații la diferite stări din cadrul programului dvs. pentru a afla dacă cererea dumneavoastră trece o condiție sau pentru a obține valoarea unei anumite variabile. În plus, este posibil să utilizați adesea funcții cum ar fi var_dump
, print_r
sau altele pentru a inspecta obiectele și tablourile.
Ceea ce întâlnesc adesea sunt câteva funcții de ajutor, cum ar fi:
funcția dump (valoarea $) echo '„; var_dump (valoare $); echo "„;
Adevărul este că am făcut și eu acest lucru de foarte mult timp.
Adevărul este că am făcut și eu acest lucru de foarte mult timp. Și ce e în neregulă cu asta? Din punct de vedere tehnic, nu este nimic în neregulă cu ea. Funcționează și face ceea ce ar trebui să facă.
Dar imaginați-vă pentru o clipă, pe măsură ce aplicațiile dvs. evoluează, ați putea obișnui să vă stropiți codul peste tot cu mici ecouri, var_dumps și debugeri personalizați. Acum, acest lucru nu este obstructiv în timpul fluxului dvs. de testare, dar dacă uitați să curățați unele dintre codurile de depanare înainte de a merge la producție? Acest lucru poate provoca unele probleme destul de înfricoșătoare, deoarece acei debuggeri minuscuți ar putea chiar să-și găsească drumul în controlul versiunilor și să rămână acolo pentru o lungă perioadă de timp.
Următoarea întrebare este: cum depanezi în producție? Din nou, imaginați-vă că navigați prin unul dintre serviciile dvs. web preferate și dintr-o dată obțineți o listă mare de informații de depanare prezentate pe ecran. Acum, desigur, poate să dispară după reîmprospătarea browserului, dar nu este o experiență foarte bună pentru utilizatorul site-ului.
În cele din urmă, v-ați dorit vreodată să puteți trece prin codul dvs., linia de linie, să vedeți expresii și chiar să introduceți un apel pentru a vedea de ce produce o valoare de returnare greșită?
Ei bine, trebuie să vă grăbiți cu adevărat în lumea depanării profesionale Xdebug, deoarece poate rezolva toate problemele de mai sus.
Nu vreau să merg prea mult în procesul de descărcare și instalare a MAMP pe un Mac. În schimb, vă voi împărtăși că folosesc PHP 5.4.4 și standardul Apache Port (80) pe parcursul acestei citiri.
O notă rapidă înainte de a începe să construim propria noastră Xdebug prin Homebrew: Dacă doriți să luați cel mai ușor traseu, MAMP deja vine cu Xdebug 2.2.0. Pentru ao activa, deschideți:
/Applications/MAMP/bin/php/php5.4.4/conf/php.ini
cu un editor de text la alegere, mergeți la partea de jos și dezarhivați ultima linie eliminând ;
.
Ultimele două rânduri ale fișierului trebuie citite astfel:
[xdebug] zend_extension = "/ Aplicații / MAMP / bin / php / php5.4.4 / lib / php / extensii / no-debug-non-zts-20100525 / xdebug.so"
Acum, dacă vă întrebați:
"De ce aș vrea să aleg o cale mai grea decât asta?"
Și răspunsul meu la asta este că nu este niciodată o greșeală să te uiți dincolo de jantă și să înveți ceva nou. Mai ales ca dezvoltator in aceste zile, aruncarea unui ochi pe chestii legate de server va fi mereu la indemana la un moment dat. Promisă.
Puteți obține Apple Xcode gratuit de pe Mac App Store. După ce ați descărcat-o, accesați preferințele aplicației, apăsați pe „Descărcări“ și instalați "Instrumente Linie de comandă" din listă.
Homebrew este un manager de pachete îngrijorat pentru Mac OS X, care vă oferă toate lucrurile pe care Apple le-a lăsat afară. Pentru a instala Homebrew, trebuie doar să lipiți următoarea comandă în terminalul dvs..
ruby -e "$ (curl -fsSkL raw.github.com/mxcl/homebrew/go)"
Pe un Mac, Homebrew va fi cel mai convenabil mod de a instala Xdebug. Cu toate acestea, pe Linux, compilarea dvs. este cel mai bun mod de a merge; care nu este atât de ușor pe un Mac.
Sfat: utilizatorii Windows trebuie doar să descarce * .dll
fișier de la Xdebug.org, puneți-l în folderul XAMPP și adăugați calea către el php.ini
fişier.
În calitate de dezvoltator PHP, ar trebui să cunoașteți de acum înainte "replicul" Gothub repo al lui José Gonzalez, care conține multe utilități pentru dvs. Dacă v-ați întrebat vreodată cum să instalați PHP 5.4 manual, sunteți chiar acolo.
Dacă întâmpinați probleme în timp ce instalați Homebrew, consultați cititorul lui Jose.
Pentru a finaliza excursia noastră Homebrew, vrem să "atingem" formulele de preparare ale lui Jose executând următoarele comenzi în cadrul aplicației terminale:
bea tap homebrew / dupes
Acest lucru ne va aduce unele dependențe de care avem nevoie pentru formulele lui Jose.
bea tap josegonzalez / homebrew-php
Terminat! Acum ar trebui să fim gata să instalăm Xdebug în mod comfortabil, pe un Mac.
Înapoi în aplicația terminalului, vă rugăm să executați:
brew instalați php54-xdebug
Dacă sunteți pe PHP 5.3, înlocuiți "4" cu "3";)
Instalarea va dura ceva timp. După ce ați terminat, veți vedea o mică pictogramă de bere și câteva instrucțiuni suplimentare pe care le puteți ignora.
Ce sa întâmplat? Homebrew a descărcat toate fișierele, inclusiv dependențele, și le-a construit pentru dvs. După cum v-am spus deja, compilarea pe Mac poate fi un hassle. În final, avem o compilație proaspătă xdebug.so
situat la /usr/local/Cellar/php54-xdebug/2.2.1/
.
Atenție: Rețineți că Homebrew va instala PHP 5.4 în sistemul dvs. în timpul procesului. Acest lucru nu trebuie să influențeze nimic, deoarece nu este activat în sistemul dvs..
Pentru a instala în final Xdebug, trebuie doar să urmăm câțiva pași.
Schimbați directorul (CD
) în dosarul extensiilor MAMP:
cd /Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525
Puteți verifica din nou calea urmărind ultima linie din /Applications/MAMP/bin/php/php5.4.4/conf/php.ini
, deoarece aici mergem.
Actualizați existența xdebug.so
doar în cazul în care:
mv xdebug.so xdebug.so.bak
Apoi, copiați-vă construirea Homebrew Xdebug:
cp /usr/local/Cellar/php54-xdebug/2.2.1/xdebug.so /Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525/
Dacă doriți să forțați o copie (cp
) pentru a suprascrie fișierele existente, pur și simplu tinta sursa cp -X
.
Nu în ultimul rând, trebuie să modificăm php.ini
fișier pentru a încărca fișierul extensie Xdebug. Deschis /Applications/MAMP/bin/php/php5.4.4/conf/php.ini
cu un editor de text la alegere, mergeți la partea de jos și dezarhivați ultima linie eliminând punct și virgulă din față. Nu închideți fișierul încă.
Acum relansați MAMP, mergeți la http: //localhost/MAMP/phpinfo.php
. Dacă totul a mers bine, ar trebui să găsiți acest lucru în cadrul producției:
Dacă da nu de lucru, vă rugăm să vă asigurați că ați copiat cu adevărat peste xdebug.so
și aveți calea cea bună în dvs. php.ini
fişier.
Înainte de a începe efectiv depanarea, trebuie să activați Xdebug. Prin urmare, sper că nu v-ați închis php.ini
, deoarece trebuie să adăugăm această linie până la sfârșit, după zend_extension
opțiune:
xdebug.remote_enable = Activată
Salvați și închideți-vă php.ini
fișier și reporniți MAMP. Mergi la http: //localhost/MAMP/phpinfo.php
din nou și căutați xdebug.remote
pe site. Valorile tale ar trebui să arate exact ca a mea:
Dacă nu, urmați aceeași procedură pe care ați adăugat-o remote_enable = Activat
pentru celelalte afirmații de la sfârșitul anului php.ini
fişier.
Acum, deschideți IDE-ul ales. Puteți folosi Xdebug cu o serie de soluții software populare precum Eclipse, Netbeans, PhpStorm și, de asemenea, Sublime Text. După cum am spus mai devreme, voi folosi PhpStorm EAP 6 pentru acest demo.
În interiorul PhpStorm, deschideți preferințele aplicației și găsiți calea spre "PHP \ Debug \ DBGp Proxy" pe partea stângă, ca în imaginea de mai jos:
Acum alegeți cheia IDE personală. Acesta poate fi orice șir alfanumeric pe care îl doriți. Prefer să-i spun PhpStorm
, dar XDEBUG_IDE
sau numele meu
ar fi chiar perfect. Este important să setați "Port" valoare pentru 9000
deoarece configurația noastră standard Xdebug folosește acest port pentru a se conecta la IDE.
Sfat: dacă trebuie să ajustați acest lucru, adăugați xdebug.remote_port = număr de port
pentru dumneavoastră php.ini
fişier.
Atenție: Alte componente pot schimba această valoare în interiorul programului PhpStorm, deci aveți grijă dacă nu se întâmplă ceva.
Apoi, faceți clic pe acel buton roșu pentru telefon, cu un mic bug de lângă el pe bara de instrumente de sus. Ar trebui să devină verde. Acest lucru face ca PhpStorm să asculte conexiunile Xdebug.
Acum trebuie să creăm ceva pentru depanare. Creați un nou fișier PHP, sunați-l după cum doriți și inserați în următorul cod:
Acum, acest cod este fals în mod implicit, dar îl vom rezolva într-un moment, în secțiunea următoare.
Asigurați-vă că totul este salvat și deschideți browserul în scriptul pe care tocmai l-am creat. Voi folosi Google Chrome pentru această demonstrație, dar orice browser va face.
Acum, să luăm o clipă pentru a înțelege cum este inițializat procesul de depanare. Starea noastră actuală este: Xdebug activat ca extensie Zend, ascultând
port 9000
pentru ca un cookie să apară în timpul unei solicitări. Acest modul cookie va purta o cheie IDE care ar trebui să fie aceeași cu cea pe care am stabilit-o în interiorul IDE-ului nostru. Pe măsură ce Xdebug vede cookie-ul care transmite cererea, va încerca să se conecteze la un proxy, IDE-ul nostru.Deci, cum obținem cookie-ul în locul lui? lui PHP
setcookie
? Nu. Deși există mai multe moduri, chiar și unele pentru a obține acest lucru fără un cookie, vom folosi o extensie de browser puțin ca ajutor.Instalați "Xdebug helper" "în browserul Google Chrome sau căutați orice extensie care o va face pentru browserul pe care îl utilizați.
După ce ați instalat extensia, faceți clic dreapta pe micile erori care apar în bara de adrese și accesați opțiunile. Configurați valoarea pentru cheia IDE pentru a se potrivi cu cheia pe care ați ales-o în IDE, cum ar fi:
După configurare, faceți clic pe eroare și selectați "Debug" din listă. Problema ar trebui să devină verde:
Acum, reveniți la PhpStorm sau IDE-ul dvs. de alegere și stabiliți un "breakpoint". Punctele de blocare sunt ca markerele pe o linie care le spun debuggerului să oprească execuția scenariului la punctul de întrerupere.
În PhpStorm, puteți adăuga puncte de întrerupere făcând clic pe spațiul de lângă numerele de linie de pe partea stângă:
Doar încercați să faceți clic pe locul unde apare punctul roșu pe ecran. Veți avea apoi un set de întrerupere la care scenariul dvs. ar trebui să întrerupă.
Notă: Puteți avea mai multe puncte de întrerupere în cât mai multe fișiere decât doriți.
Acum suntem toți pregătiți. Reveniți la browserul dvs., asigurați-vă că bug-ul este verde și reîncărcați pagina pentru a trimite cookie-ul cu următoarea solicitare.
Sfat: dacă setați un cookie, acesta va fi disponibil pentru următoarea solicitare.
Dacă totul merge conform planului, această fereastră ar trebui să apară în interiorul PhpStorm pentru a vă informa despre o conexiune de depanare primită:
Fereastra nu ți-a dat popup? Să facem câteva depanări și să repetăm ce trebuie setat pentru a reuși:
- Ar trebui să găsești informații Xdebug în interiorul lui
phpinfo ()
de ieșire. Dacă nu, ia-oxdebug.so
fișier în locul potrivit și configurați-văphp.ini
fişier.- Setați setările DBGp PhpStorm la cheia dvs. IDE, de ex. "PHPSTORM" și portul "9000".
- Asigurați-PhpStorm asculta conexiuni de depanare de intrare folosind pictograma de telefon roșu, care va deveni verde.
- Setați un punct de întrerupere în codul dvs. sau selectați "Run \ Break la prima linie în script-uri PHP" pentru a fi independent de orice puncte de întrerupere. Rețineți că acest lucru nu este potrivit pentru utilizare practică.
- Obțineți o extensie de browser pentru a seta cookie-ul Xdebug.
- Asigurați-vă că extensia browserului are aceeași cheie IDE pe care ați ales-o în interiorul IDE.
- Reîncarcă pagina și PhpStorm ar trebui să primească conexiunea.
Dacă obțineți dialogul văzut pe imaginea anterioară, acceptați-l. Acest lucru vă va duce în modul de depanare, după cum urmează:
Puteți vedea că programul de depanare a oprit execuția scriptului la punctul de întrerupere, evidențiind linia albastră. PHP așteaptă și este acum controlată de Xdebug, care este condus de mâinile tale de acum încolo.
Spațiul nostru principal de lucru va fi secțiunea inferioară a IDE care arată deja unele informații despre scriptul care rulează (superglobals).
Și te-ai uita la asta? Există cookie-ul pe care tocmai l-am setat pentru a începe sesiunea de depanare. Acum puteți să faceți clic pe superglobalii și să le examinați valorile în acest moment. PHP este în așteptare, nu există nici o limită de timp, cel puțin nu implicit 30 de secunde.
În partea stângă, veți vedea câteva butoane. Pentru moment, numai "Joaca" și "Stop" sunt de interes pentru noi. Butonul verde de redare va relua scriptul. Dacă există un alt punct de întrerupere în cod, scenariul va continua până când ajunge la punctul de întrerupere și va opri din nou.
Butonul de stop roșu anulează scenariul. La fel ca PHP
Ieșire
saua muri
ar face.
Acum, lucrurile cu adevărat interesante vin în secțiunea superioară a ferestrei de depanare:
Să le verificăm rapid:
- Pas peste: Aceasta înseamnă pasul cu o linie înainte.
- Pășește înăuntru: Dacă linia albastră evidențiază, de exemplu, un apel de funcționare, acest buton vă permite să treceți prin cunoștințele funcției.
- Iesi afara: Dacă ați intrat într-o funcție și doriți să ieșiți înainte să se ajungă la final, trebuie doar să ieșiți.
- Rulați la cursor: Să presupunem că, de exemplu, fișierul dvs. are o lungime de 100 de linii și punctul dvs. de pauză a fost setat la linia doi pentru a inspecta ceva. Acum doriți să rulați rapid la punctul în care ați făcut clic pe cursorul dvs. - acest buton este pentru dvs. Puteți face clic pe "Pas peste"
n
timpuri prea;)Acum nu vă faceți griji, pe măsură ce utilizați Xdebug, vă veți adapta rapid la comenzile rapide de pe tastatură.
De fapt, se debughează un exemplu de cod
V-am spus deja că codul pe care îl copiați / lipiți este fals, deci va trebui să îl depanați. Începeți trecerea peste cod, instrucțiune după instrucțiune.
Rețineți că linia albastră se oprește numai pe liniile care conțin de fapt o comandă. Spațiul alb și comentariile vor fi ignorate.
Odată ce ați ajuns la apelul la funcție
incarca date
, Vă rog nu intrați în ea, doar treci peste și se oprește pedacă
afirmație.
Puteți vedea două variabile noi în „Variabile“ panou din partea de jos a ecranului. Acum, de ce a făcut-o
$ date
varianta returnata false? Se pare că scenariul ar fi trebuit să-și facă treaba. Hai să aruncăm o privire. Du-te înapoi la linia șapte pentru a intra în funcția de apel -> bam! Avem un mesaj care ne informează că nu putem "să renunțăm". Pentru a obține depanatorul dvs. la linia șapte din nou, trebuie să opriți această sesiune și reîncărcați pagina în browser. Faceți acest lucru și intrați în funcția de apel de această dată.Opriți pe
întoarcere
declarație în interiorulincarca date
funcționează și vedeți ce sa întâmplat:
$ phpData
matricea este goală.întoarcere
declarația utilizează un operator ternar pentru a detecta ce trebuie returnat. Și se va întoarcefals
pentru o matrice goală.Fixați linia pentru a spune:
returnați $ phpData;La fel de
json_decode
va returna datele saunul
pe eșec. Acum, opriți sesiunea de depanare, reîncărcați browserul și treceți de această dată această funcție.
Acum se pare că avem încă o problemă când intrăm în condiție. Vă rugăm să remediați condiția de utilizare
is_null ()
pentru a detecta ce se întâmplă:dacă (is_null ($ data)) die ('Nu s-a putut încărca datele');Acum depinde de tine să încerci și să te apropii puțin. Aș sugera să readuce scriptul la versiunea originală de fals, să o depanezi
ecou
și apoi comparați modul în care se simte în comparație cu utilizarea Xdebug.
Concluzie
În tot acest articol ar fi trebuit să câștigați multe cunoștințe noi. Nu ezita să o citești din nou și să-i ajuți pe un prieten să instaleze Xdebug - nimic mai bun decât asta!
Poate doriți să încercați să înlocuiți comportamentul dvs. obișnuit de depanare folosind Xdebug. Mai ales în cazul proiectelor mai mari, orientate spre obiecte, deoarece devin mult mai ușor de depanat și chiar prindeți fluxul, dacă nu obțineți nimic imediat.
Rețineți că acesta este doar vârful aisbergului. Xdebug oferă mult mai multă putere care trebuie explorată.
Nu ezitați să puneți întrebări în comentariile dvs. și spuneți-mi ce credeți.