tdc2016sp - depurando aplicações php like a boss

36
Depurando aplicações PHP like a BOSS Thiago Rodrigues Eng. de Software Sr. CI&T - PHPSP

Upload: tdc-globalcode

Post on 20-Mar-2017

54 views

Category:

Education


5 download

TRANSCRIPT

Page 1: TDC2016SP - Depurando Aplicações PHP Like a BOSS

DepurandoaplicaçõesPHPlike aBOSS

ThiagoRodriguesEng.deSoftwareSr.CI&T- PHPSP

Page 2: TDC2016SP - Depurando Aplicações PHP Like a BOSS

ThiagoRodrigues

BacharelemSistemasdeInformaçãopelaUniversidadedoEstadodeMinasGerais(UEMG);

Engenheiro deSoftwareSêniornaCI&T

Programador PHPhá11anos;

EvangelistaPHPSP

Entusiastadosoftwarelivre

Gammer

Page 3: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Depuração- Oqueé?

Definiçãoformal:

Depuração (eminglês:debugging,debug)éoprocessodeencontrarereduzirdefeitosnumaplicativodesoftwareoumesmoemhardware.[..]

https://pt.wikipedia.org/wiki/Depuração

• diariamentedespendemos esforçoconsiderável

• éumprocessoanalítico

• éumprocesso repetitivo

• éincremental(dividir paraconquistar)

• podehavermuitapressãoenvolvida

Page 4: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Depuração- Habilidadenecessária

Obomdesenvolvedorécapazdedepurareresolverproblemas com:

• tranquilidade

• efetividade

• produtividade

• clareza

• assertividade

Page 5: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Depuração- domíniodeferramentas

Paraexecutarbemqualquer

trabalhoéfundamental dominar

ferramentasqueauxiliamna

execuçãodomesmo.

Ahabilidadedecriareusar

ferramentasfoieaindaé

fundamentalparaespéciehumana.

Page 6: TDC2016SP - Depurando Aplicações PHP Like a BOSS

QuaisferramentasvocêsusamparadepuraraplicaçõesPHP?

Page 7: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Ferramentasdedepuração- Nãoexistebaladeprata

Diferentesproblemasdemandam ferramentasdiferentes.

Éfundamentalconhecerdiversasferramentas,entenderquandousarecomousar.

Page 8: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Bê-a-bá dadepuraçãodeaplicaçõesPHP

<?php echo 'Hello world!';

Page 9: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Bê-a-bá dadepuraçãodeaplicaçõesPHP

<?php$vetor = array(

'frutas' => array('banana', 'maça', 'laranja'

),'vegetais' => array(

'alface', 'rúcula', 'couve'),

);

echo $vetor;

Page 10: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Bê-a-bá dadepuraçãodeaplicaçõesPHP

<?php$vetor = array(

'frutas' => array('banana', 'maça', 'laranja'

),'vegetais' => array(

'alface', 'rúcula', 'couve'),

);

print_r($vetor);

Page 11: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Bê-a-bá dadepuraçãodeaplicaçõesPHP

<?php$vetor = array(

'frutas' => array('banana', 'maça', 'laranja'

),'vegetais' => array(

'alface', 'rúcula', 'couve'),

);

echo '<pre>';print_r($vetor);

Page 12: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Bê-a-bá dadepuraçãodeaplicaçõesPHP

<?php$vetor = array(

'',NULL,'laranja',123, '123', 1.0,'1.0',

);echo '<pre>';print_r($vetor);

Page 13: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Bê-a-bá dadepuraçãodeaplicaçõesPHP

<?php$vetor = array(

'',NULL,'laranja',123,'123',1.0,'1.0',

);echo '<pre>';var_dump($vetor);

Page 14: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Bê-a-bá dadepuraçãodeaplicaçõesPHP

<?php$vetor = array(

// elementos);ob_start();echo '<pre>';var_dump($vetor);$info = ob_get_clean();file_put_contents('/tmp/debug.html', $info);echo 'Oi ;)';

Page 15: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Problemascomunsdaabordagem"imprimirnatela"

• Esforçorepetitivo

• Nãoexibetodoocontexto devariáveis

• Dificultaoentendimentodeestruturasdedadoscomplexas

• Requeraquebradefuncionalidadeparatestesemprodução

• Vocêpodesedaraesseluxo?Oqueosusuáriosvãopensar?

• Desperdiça-semuitotempotentando identificarfluxoscomplexos imprimindovalores

seguidodafunçãoexit()oudie().

• Devezemquandoalgumdessesecho/print_r/var_dump sãoesquecidos,acarretandona

quebradefuncionalidadesoudolayout.

• Identificaçãodeproblemasdeperformanceéextremamenteonerosa

Page 16: TDC2016SP - Depurando Aplicações PHP Like a BOSS

EnsinofundamentaldadepuraçãodeaplicaçõesPHP

Ajustarphp.ini paraexibirqualquer tipodeerro:

error_reporting = E_ALLdisplay_errors = On # Desligar em PROD.

Verificarlogsdoservidorwebenquantoasrequisiçõesestãoocorrendo (stream):

sudo tail -f /var/log/apache2/error.log [outro/file]

Page 17: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Tiposdedepuração

DebuggingConecta-seaosoftwareecontrolaofluxodeexecuçãodaaplicaçãoeobtémseuestado.

TracingImprimeinformaçõesemmomentoschaves,taiscomoapilhadeexecuçãodaaplicação.

ProfilingColetaemensuradiversosdadosestatísticosdaaplicação,taiscomotempodeexecução,memóriautilizada,quantidadesdechamadas,etc.

Page 18: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug

Amaispoderosa ferramentadedepuraçãoPHP.

Principaisfuncionalidades:

• Debugging

• Tracing

• Profiling

• Proteçãocontraloopinfinito

• Deixaovar_dump bonito

Page 19: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - Instalação

NoLinux:

sudo apt-get install php5-xdebug

NoMac(usandobrew):

sudo brew install php56-xdebug

Page 20: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - Tracing

Page 21: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - "embeleza"ovar_dump

Page 22: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - Configurandodepuraçãoremota

Noservidorweb- xdebug.ini:xdebug.remote_connect_back=1xdebug.remote_enable=1

TúnelSSH(necessáriosomenteparaaplicaçõesremotas)ssh -R 9000:localhost:9000 [email protected]

Page 23: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - ConfigurandodepuraçãoremotanoPHPStorm

1) AbraajanelaPreferences enavegueatéPHP>Servers.2)PreenchaoName,Host ePorta doservidorPHP.3) Seforumservidorremoto,habilite"Usepathmappings" emapeiearaizdoprojeto localcomocaminhoabsoluto doprojetonoservidorremoto.4) CliqueemOK parasalvarefecharajanela.

Page 24: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - ConfigurandodepuraçãoremotanoPHPStorm

1) VáatéomenuRun ecliqueemEdit Configurations.2)Cliquenobotão+ edepoisemPHPWebApplication.3) PreenchaocampoName;nocampoServer selecioneoservidorcriadonoslideanteriorecoloque/ emStartURL.4) CliqueemOK parasalvarefecharajanela.

Page 25: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - IniciandoadepuraçãonoPHPStorm

Seadepuraçãoforremota,criarotúnelSSHantes.

1) VáatéomenuRun ecliqueemDebug'nome'.2)Seráabertoumajaneladonavegador.

Page 26: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - TeladedepuraçãonoPHPStorm

Page 27: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - DepuraçãonoPHPStorm

Page 28: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - Configurandoprofiling

xdebug.ini

xdebug.profiler_enable_trigger=1xdebug.profiler_enable=1xdebug.profiler_output_dir="/var/www/phpsp"

Visiteosite,notequeelecriaráalgunsarquivoscachegrind.out napastaespecificada.

NoPHPStorm:AcesseTools>Analyze Xdebug ProfilerSnapshot eselecionealgumarquivocachegrind.out.

Page 29: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - Analisandoprofiling noPHPStorm

Page 30: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Xdebug - Analisandoprofiling noKCachegrind

Page 31: TDC2016SP - Depurando Aplicações PHP Like a BOSS

XHProf

Ferramentaparaprofiling.

Page 32: TDC2016SP - Depurando Aplicações PHP Like a BOSS

XHProf - Gráficodechamadas

Page 33: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Webprofiler doframework

Page 34: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Blackfire - outraferramentadeprofiling

Page 35: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Conclusão

Precisachecarumaestruturadedadosbásica? var_dump

Precisainvestigarofluxodeexecução? Xdebug

Precisainvestigarumaestruturadedadoscomplexa? Xdebug

Precisamelhoraraperformancedeumapágina? Utilizeumaferramentadeprofiling

antesdesairatirandoparatodolado.

Invistaseutempoemferramentasdedepuraçãoparaganharprodutividade.

Page 36: TDC2016SP - Depurando Aplicações PHP Like a BOSS

Contato

[email protected]