Upload
tdc-globalcode
View
54
Download
5
Embed Size (px)
Citation preview
DepurandoaplicaçõesPHPlike aBOSS
ThiagoRodriguesEng.deSoftwareSr.CI&T- PHPSP
ThiagoRodrigues
BacharelemSistemasdeInformaçãopelaUniversidadedoEstadodeMinasGerais(UEMG);
Engenheiro deSoftwareSêniornaCI&T
Programador PHPhá11anos;
EvangelistaPHPSP
Entusiastadosoftwarelivre
Gammer
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
Depuração- Habilidadenecessária
Obomdesenvolvedorécapazdedepurareresolverproblemas com:
• tranquilidade
• efetividade
• produtividade
• clareza
• assertividade
Depuração- domíniodeferramentas
Paraexecutarbemqualquer
trabalhoéfundamental dominar
ferramentasqueauxiliamna
execuçãodomesmo.
Ahabilidadedecriareusar
ferramentasfoieaindaé
fundamentalparaespéciehumana.
QuaisferramentasvocêsusamparadepuraraplicaçõesPHP?
Ferramentasdedepuração- Nãoexistebaladeprata
Diferentesproblemasdemandam ferramentasdiferentes.
Éfundamentalconhecerdiversasferramentas,entenderquandousarecomousar.
Bê-a-bá dadepuraçãodeaplicaçõesPHP
<?php echo 'Hello world!';
Bê-a-bá dadepuraçãodeaplicaçõesPHP
<?php$vetor = array(
'frutas' => array('banana', 'maça', 'laranja'
),'vegetais' => array(
'alface', 'rúcula', 'couve'),
);
echo $vetor;
Bê-a-bá dadepuraçãodeaplicaçõesPHP
<?php$vetor = array(
'frutas' => array('banana', 'maça', 'laranja'
),'vegetais' => array(
'alface', 'rúcula', 'couve'),
);
print_r($vetor);
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);
Bê-a-bá dadepuraçãodeaplicaçõesPHP
<?php$vetor = array(
'',NULL,'laranja',123, '123', 1.0,'1.0',
);echo '<pre>';print_r($vetor);
Bê-a-bá dadepuraçãodeaplicaçõesPHP
<?php$vetor = array(
'',NULL,'laranja',123,'123',1.0,'1.0',
);echo '<pre>';var_dump($vetor);
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 ;)';
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
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]
Tiposdedepuração
DebuggingConecta-seaosoftwareecontrolaofluxodeexecuçãodaaplicaçãoeobtémseuestado.
TracingImprimeinformaçõesemmomentoschaves,taiscomoapilhadeexecuçãodaaplicação.
ProfilingColetaemensuradiversosdadosestatísticosdaaplicação,taiscomotempodeexecução,memóriautilizada,quantidadesdechamadas,etc.
Xdebug
Amaispoderosa ferramentadedepuraçãoPHP.
Principaisfuncionalidades:
• Debugging
• Tracing
• Profiling
• Proteçãocontraloopinfinito
• Deixaovar_dump bonito
Xdebug - Instalação
NoLinux:
sudo apt-get install php5-xdebug
NoMac(usandobrew):
sudo brew install php56-xdebug
Xdebug - Tracing
Xdebug - "embeleza"ovar_dump
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]
Xdebug - ConfigurandodepuraçãoremotanoPHPStorm
1) AbraajanelaPreferences enavegueatéPHP>Servers.2)PreenchaoName,Host ePorta doservidorPHP.3) Seforumservidorremoto,habilite"Usepathmappings" emapeiearaizdoprojeto localcomocaminhoabsoluto doprojetonoservidorremoto.4) CliqueemOK parasalvarefecharajanela.
Xdebug - ConfigurandodepuraçãoremotanoPHPStorm
1) VáatéomenuRun ecliqueemEdit Configurations.2)Cliquenobotão+ edepoisemPHPWebApplication.3) PreenchaocampoName;nocampoServer selecioneoservidorcriadonoslideanteriorecoloque/ emStartURL.4) CliqueemOK parasalvarefecharajanela.
Xdebug - IniciandoadepuraçãonoPHPStorm
Seadepuraçãoforremota,criarotúnelSSHantes.
1) VáatéomenuRun ecliqueemDebug'nome'.2)Seráabertoumajaneladonavegador.
Xdebug - TeladedepuraçãonoPHPStorm
Xdebug - DepuraçãonoPHPStorm
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.
Xdebug - Analisandoprofiling noPHPStorm
Xdebug - Analisandoprofiling noKCachegrind
XHProf
Ferramentaparaprofiling.
XHProf - Gráficodechamadas
Webprofiler doframework
Blackfire - outraferramentadeprofiling
Conclusão
Precisachecarumaestruturadedadosbásica? var_dump
Precisainvestigarofluxodeexecução? Xdebug
Precisainvestigarumaestruturadedadoscomplexa? Xdebug
Precisamelhoraraperformancedeumapágina? Utilizeumaferramentadeprofiling
antesdesairatirandoparatodolado.
Invistaseutempoemferramentasdedepuraçãoparaganharprodutividade.
Contato