Xdebug - Profesjonell PHP Debugging

Vår agenda

  1. Innledning til emnet.
  2. Laster ned og installerer Xdebug på din lokale maskin (Mac OS X 10.6.6+, MAMP 2.1.1).
  3. Integrering med PhpStorm.
  4. Øv feilsøking.

Hva du trenger

  • En Mac som kjører Mac OS X 10.6.6+.
    • Hvis du er på 10.8.X deg kan trenger å installere XQuartz ettersom Apple fjernet X11.
    • Hvis du er på Windows, er hele prosessen litt enklere, bare klikk Google for mer informasjon.
  • Apple Xcode 4.6 (gratis på Mac App Store).
    • Kommandolinjeverktøy.
  • Hjemme brygget.
  • En terminal app av ditt valg.
  • PhpStorm 5+ (mange andre IDE'er vil også fungere).

Hva er Xdebug?

Vel, teknisk, Xdebug er en forlengelse for PHP for å gjøre livet enklere når du feilsøker koden din. Akkurat nå kan du være vant til å feilsøke koden din med forskjellige andre enkle løsninger. Disse inkluderer bruk av ekko uttalelser ved forskjellige stater i programmet ditt for å finne ut om søknaden din overgår en betingelse eller for å få verdien av en bestemt variabel. Videre kan du ofte bruke funksjoner som var_dump, print_r eller andre til å inspisere gjenstander og arrays.

Det jeg ofte møter er små hjelperfunksjoner, som for eksempel denne:

funksjon dump ($ verdi) echo '
'; var_dump ($ verdi); ekko '
';

Sannheten er at jeg pleide å gjøre dette også, i veldig lang tid faktisk.

Sannheten er at jeg pleide å gjøre dette også, i veldig lang tid faktisk. Så hva er galt med det? Teknisk er det ingenting galt med det. Det fungerer og gjør hva det skal gjøre.

Men bare forestill deg et øyeblikk, ettersom søknadene dine utvikler seg, kan du bli vant til å sprinkle koden din overalt med små ekkoer, var_dumps og tilpassede debuggere. Nå gitt, dette er ikke obstruktivt under testprosessen, men hva hvis du glemmer å rydde ut noen av den feilkode før den går til produksjon? Dette kan forårsake noen ganske skummelt problemer, da de små debuggerne kan finne sin vei inn i versjonskontroll og bli der lenge.

Det neste spørsmålet er: hvordan feilsøker du i produksjon? Igjen, forestill deg at du surfer på en av dine favorittwebtjenester, og plutselig får du et stort utvalg dump av feilsøkingsinformasjon som presenteres for deg på skjermen. Nå kan det selvfølgelig forsvinne etter neste nettleseroppdatering, men det er ikke en veldig god opplevelse for brukeren av nettstedet.

Endelig har du noen gang ønsket å kunne gå gjennom koden din, linje for linje, se på uttrykk og til og med gå inn i et funksjonsanrop for å se hvorfor det gir feil returverdi?

Vel, du bør definitivt grave inn i verden med profesjonell feilsøking med Xdebug, som det kan løse alle problemene ovenfor.


Konfigurere MAMP

Jeg vil ikke gå for dypt inn i nedlastings- og installasjonsprosessen av MAMP på en Mac. I stedet vil jeg bare dele med deg at jeg bruker PHP 5.4.4 og standard Apache Port (80) gjennom denne lese.


Din første beslutning

Et kort notat før vi begynner med å bygge vår egen Xdebug via Homebrew: Hvis du vil ha den enkleste ruten, kommer MAMP allerede med Xdebug 2.2.0. For å aktivere det, åpne:

/Applications/MAMP/bin/php/php5.4.4/conf/php.ini

Med et tekstredigeringsprogram etter eget valg, gå helt til bunnen og uncomment den siste linjen ved å fjerne ;.

De to siste linjene i filen skal leses slik:

[xdebug] zend_extension = "/ Programmer / MAMP / bin / php / php5.4.4 / lib / php / utvidelser / no-debug-non-zts-20100525 / xdebug.so"

Nå hvis du spør deg selv:

"Hvorfor vil jeg velge en vanskeligere måte enn denne?"

Og mitt svar på det er, det er aldri en feil å se utover din rand og lære noe nytt. Spesielt som utvikler i disse dager, vil kaste et øye med serverrelaterte ting alltid komme til nytte når som helst. lovet.


Installer Xcode og Command Line Tools

Du kan få Apple Xcode gratis av Mac App Store. Når du har lastet ned det, kan du gå til programinnstillingene, trykke på "Downloads" tab og installer "Kommandolinjeverktøy" fra listen.


Installer Homebrew

Homebrew er en fin liten pakkeadministrator for Mac OS X som gir deg alle de ting Apple har forlatt. For å installere Homebrew, lim inn følgende kommando i terminalen din.

ruby -e "$ (curl -fsSkL raw.github.com/mxcl/homebrew/go)"

På en Mac vil Homebrew være den mest praktiske måten å installere Xdebug på. På Linux er det imidlertid den beste måten å kompilere på deg selv. som ikke er så lett på en Mac.

Tips: Windows-brukere trenger bare å laste ned * .dll fil fra Xdebug.org, sett den inn i XAMPP-mappen og legg til banen til deres php.ini fil.

Som PHP-utvikler bør du fra nå av være oppmerksom på Jose Gonzalez 'homebrew-php "Github repo, som inneholder mange nyttige" brews "for deg. Hvis du noen gang har spurt deg selv hvordan du installerer PHP 5.4 manuelt, er du der.

Nå, hvis du kommer inn i noen problemer mens du installerer Homebrew, sjekk ut Jose's Readme.

For å fullføre vår Homebrew utflukt, vil vi "trykke" på Jose's brygging formler ved å utføre følgende kommandoer i din terminale applikasjon:

bryg bryt på homebrew / dupes

Dette vil gi oss noen avhengigheter vi trenger for Jose's formler.

bryg trykk josegonzalez / homebrew-php

Ferdig! Nå skal vi være klare til å installere Xdebug den hyggelige måten, på en Mac.


Installer Xdebug

Tilbake i din terminal applikasjon, vennligst utfør:

brygge installasjon php54-xdebug

Hvis du er på PHP 5.3, bare erstatt "4" med en "3";)

Installasjonen tar litt tid. Etter at det er gjort, vil du se et lite ølikon og noen ytterligere instruksjoner som du kan ignorere.

Så hva skjedde det? Homebrew lastet ned alle filene, inkludert deres avhengigheter og bygget dem for deg. Som jeg allerede har fortalt deg, kan du lage en problemfri kompilering på en Mac. På slutten ble vi ferdig sammensatt xdebug.so ligger ved /usr/local/Cellar/php54-xdebug/2.2.1/.

Oppmerksomhet: Vær oppmerksom på at Homebrew vil installere PHP 5.4 til systemet ditt under prosessen. Dette bør ikke påvirke noe som det ikke er aktivert på systemet ditt.

For å endelig installere Xdebug, trenger vi bare å følge noen få trinn.

Endre katalog (cd) til MAMPs utvidelsesmappe:

cd /Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525

Du kan sjekke banen igjen ved å se på den siste linjen i /Applications/MAMP/bin/php/php5.4.4/conf/php.ini, som dette er hvor vi skal.

Sikkerhetskopiere eksisterende xdebug.so for sikkerhets skyld:

mv xdebug.so xdebug.so.bak

Deretter kopierer du Homebrew Xdebug build:

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/

Hvis du vil tvinge en kopi (cp) kommandoen for å overskrive eksisterende filer, bare gjør cp -X kilde mål.

Sist, men ikke minst, må vi endre php.ini fil for å laste Xdebug-utvidelsesfilen. Åpen /Applications/MAMP/bin/php/php5.4.4/conf/php.ini med en tekstredigerer du ønsker, gå helt til bunnen og uncomment den siste linjen ved å fjerne semikolonet på forsiden. Ikke lukk filen bare ennå.

Nå gjenoppstart MAMP, gå til http: //localhost/MAMP/phpinfo.php. Hvis alt gikk bra, bør du finne dette innen utgangen:


Hvis det gjorde det ikke arbeid, vær så snill og pass på at du virkelig kopierte over xdebug.so og ha den rette veien i din php.ini fil.


Start feilsøking

Før vi faktisk kan starte feilsøking, må vi aktivere Xdebug. Derfor håper jeg at du ikke lukker ut din php.ini, som vi må legge til denne linjen helt til slutt, etter zend_extension alternativ:

xdebug.remote_enable = På

Lagre og lukk din php.ini fil og start MAMP. Gå til http: //localhost/MAMP/phpinfo.php igjen og søk etter xdebug.remote på siden. Dine verdier skal se akkurat ut som mine:


Hvis de ikke gjør det, følg den samme prosedyren du brukte til å legge til remote_enable = På for de andre uttalelsene på slutten av din php.ini fil.

Nå, åpne din IDE av valg. Du kan bruke Xdebug med en rekke populære programvare løsninger som Eclipse, Netbeans, PhpStorm og også Sublime Text. Som jeg sa før, skal jeg bruke PhpStorm EAP 6 for denne demoen.

Inne i PhpStorm åpner du programinnstillingene og finner veien til "PHP \ Debug \ DBGp Proxy" på venstre side, som i skjermbildet nedenfor:


Velg nå din personlige IDE-nøkkel. Dette kan være hvilken alfanumerisk streng du vil ha. Jeg foretrekker å bare kalle det PHPSTORM, men XDEBUG_IDE eller mitt navn ville være helt fint også. Det er viktig å sette "Havn" verdi til 9000 som vår standard Xdebug-konfigurasjon bruker denne porten til å koble til IDE.

Tips: Hvis du trenger å justere dette, legg til xdebug.remote_port = portnummer til din php.ini fil.

Oppmerksomhet: Andre komponenter kan endre denne verdien inne i PhpStorm, så pass på det hvis noe feiler.

Deretter klikker du den røde lille telefonen knappen med en liten feil ved siden av den på øverste verktøylinje. Det skal bli grønt. Dette gjør PhpStorm til å lytte etter innkommende Xdebug-tilkoblinger.


Nå må vi lage noe å feilsøke. Opprett en ny PHP-fil, ring den som du vil og lim inn i følgende kode:

 

Nå er denne koden forfalsket som standard, men vi vil fikse det på et øyeblikk, i neste avsnitt.

Pass på at alt er lagret og åpne nettleseren for skriptet vi nettopp har opprettet. Jeg vil bruke Google Chrome til denne demoen, men en hvilken som helst nettleser vil gjøre det.

La oss nå ta et øyeblikk for å forstå hvordan feilsøkingsprosessen er initialisert. Vår nåværende status er: Xdebug aktivert som Zend-utvidelse, lytter på port 9000 for en informasjonskapsel vises under en forespørsel. Denne informasjonskapselen vil bære en IDE-nøkkel som skal være den samme som den vi satt opp inne i vår IDE. Som Xdebug ser cookien som bærer forespørselen, vil den prøve å koble til en proxy, vår IDE.

Så hvordan får vi den informasjonen på plass? PHP setcookie? Nei. Selv om det er flere måter, selv om noen får dette til å fungere uten en cookie, bruker vi en liten nettleserutvidelse som en hjelper.

Installer "Xdebug-hjelperen" "til Google Chrome-nettleseren din eller søk etter utvidelser som vil gjøre det for nettleseren du bruker.

Når du har installert utvidelsen, høyreklikker du den lille feilen som vises i adressefeltet og går til alternativene. Konfigurer verdien for IDE-tasten for å matche nøkkelen du valgte i IDE, slik:


Etter å ha konfigurert det, klikk på feilen og velg "Debug" fra listen. Feilen skal bli grønn:


Gå nå tilbake til PhpStorm eller din IDE og velg et "breakpoint". Breakpoints er som markører på en linje som forteller debuggeren for å stoppe utførelsen av manuset på det punktet.

I PhpStorm kan du ganske enkelt legge til breakpoints ved å klikke på plassen ved siden av linjenumrene på venstre side:


Bare prøv å klikke hvor den røde prikken vises på skjermbildet. Du vil da ha et bruddpunkt som skal skanne på ditt script.

Merk: Du kan ha flere bruddpunkter i så mange filer som du vil.

Nå er vi alle satt. Gå tilbake til nettleseren din, forsikre deg om at feilen er grønn og bare last siden om å sende inn informasjonskapselen med neste forespørsel.

Tips: Hvis du angir en informasjonskapsel, vil den være tilgjengelig for neste forespørsel.

Hvis alt går etter planen, bør dette vinduet dukke opp inne i PhpStorm for å informere deg om en innkommende feilsøkingstilkobling:


Fikk vinduet ikke popup for deg? La oss gjøre noen feilsøking og gjenta hva som må settes for at dette skal lykkes:

  1. Du bør finne Xdebug info inne i phpinfo ()s utgang. Hvis ikke, få xdebug.so filen på riktig sted og sett opp din php.ini fil.
  2. Angi PhpStorm DBGp-innstillinger til din IDE-nøkkel, f.eks. "PHPSTORM" og port "9000".
  3. Gjør PhpStorm lytte etter innkommende feilsøkingstilkoblinger ved hjelp av det røde telefonikonet som da blir grønt.
  4. Angi et brytepunkt i koden din, eller velg "Run \ Break i første linje i PHP-skript" å være uavhengig av eventuelle bruddpunkter. Merk at dette ikke er egnet for praktisk bruk.
  5. Få en nettleserutvidelse for å angi Xdebug-informasjonskapsel.
  6. Pass på at nettleserutvidelsen har samme IDE-nøkkel i den som du valgte inne i IDE-en.
  7. Oppdater siden, og PhpStorm skal få tilkoblingen.

Hvis du får dialogen sett på det forrige bildet, aksepterer du det. Dette tar deg til feilsøkingsmodus, slik som:


Du kan se at debuggeren stoppet skriptets utførelse på ditt pausepunkt, og markerer linjen i blått. PHP venter nå og kontrolleres av Xdebug, som styres av dine egne hender fra nå av.

Vårt hovedarbeidsområde vil være den nedre delen av IDE som allerede viser noen opplysninger om løpeskriptet (superglobalerne).


Og vil du se på det? Det er informasjonskapsel vi nettopp har satt for å starte feilsøkingsøkten. Du kan nå klikke gjennom superglobaler og inspisere verdiene deres akkurat nå. PHP venter, det er ingen tidsbegrensning, i hvert fall ikke standard 30 sekunder.

På venstre side ser du noen knapper. For nå, bare "Spille" og "Stoppe" er av interesse for oss. Den grønne avspillingsknappen vil gjenoppta skriptet. Hvis det er et annet bruddpunkt i koden, fortsetter skriptet til det når breakpointet og stopper igjen.

Den røde stoppknappen avbryter skriptet. Akkurat som PHP exit eller ville gjort.


Nå kommer de virkelig interessante i den øvre delen av feilsøkingsvinduet:


La oss raskt sjekke dem ut:

  1. Tråkke over: Dette betyr trinn én linje fremover.
  2. Gå inn i: Hvis den blå linjen fremhever, for eksempel et funksjonsanrop, lar denne knappen deg gå gjennom innsiktene i funksjonen.
  3. Gå ut: Hvis du gikk inn i en funksjon og ønsker å komme seg ut før slutten er nådd, bare gå ut.
  4. Kjør til markør: La oss si at filen din for eksempel er 100 linjer lang, og ditt pausepunkt ble satt på linje to for å inspisere noe. Nå vil du raskt løpe til det punktet du bare klikket på markøren til - denne knappen er for deg. Du kan klikke "Tråkke over" n ganger også;)

Ikke bekymre deg, da du bruker Xdebug, vil du raskt tilpasse seg snarveiene på tastaturet.


Faktisk Feilsøking Noen Eksempel Kode

Jeg har allerede fortalt deg at koden du kopierer / limes er falsk, så du må feilsøke den. Begynn å gå over koden, uttalelse etter setning.

Merk at den blå linjen bare stopper på linjer som faktisk inneholder en kommando. Whitespace og kommentarer vil bli hoppet over.

Når du har kommet til funksjonsanropet til loadData, vær så snill ikke gå inn i den, bare gå over og hold deg på hvis uttalelse.


Du kan se to nye variabler i "variabler" panel nederst på skjermen. Nå, hvorfor gjorde $ data variabel retur falsk? Det virker som manuset burde ha gjort jobben. La oss ta en titt. Gå tilbake til linje syv for å gå inn i funksjonssamtalen -> bam! Vi får en melding som informerer oss om at vi ikke kan "gå tilbake". For å få debuggeren til å linje syv igjen, må du stoppe denne økten og laste siden på nytt i nettleseren. Gjør det og gå inn i funksjonsanropet denne gangen.

Stopp på komme tilbake uttalelse innsiden av loadData fungere og se hva som skjedde:


De $ phpData array er tomt. De komme tilbake setningen bruker en ternær operatør for å oppdage hva som skal returneres. Og det kommer tilbake falsk for en tom rekkefølge.

Fest linjen for å si:

returnere $ phpData;

Som json_decode vil enten returnere dataene eller null på feil. Nå stopp feilsøkingssesjonen, last inn nettleseren din, og gå over funksjonsanrop denne gangen.


Nå ser det ut til at vi fortsatt har et problem når vi går inn i tilstanden. Vennligst lag tilstanden som skal brukes is_null () å oppdage hva som skjer:

hvis (is_null ($ data)) die ('Kunne ikke laste data'); 

Nå er det opp til deg å prøve å gå litt rundt. Jeg vil foreslå å gå tilbake til skriptet til den opprinnelige falske versjonen, feilsøke den med ekko's og sammenlign deretter hvordan det føles i forhold til å bruke Xdebug.


Konklusjon

Gjennom hele denne artikkelen bør du ha fått mye ny kunnskap. Ikke nøl med å lese den igjen og for å hjelpe en venn å sette opp Xdebug - ingenting bedre enn det!

Du vil kanskje prøve å erstatte din vanlige feilsøkingsadferd ved å bruke Xdebug i stedet. Spesielt med større, objektorienterte prosjekter, da de blir mye lettere å feilsøke og til og med ta opp strømmen, hvis du ikke får noe med en gang.

Merk at dette bare er toppen av isfjellet. Xdebug tilbyr mye mer kraft som også må utforskes.

Ta gjerne spørsmål i kommentarene og gi meg beskjed om hva du synes.