Depurando aplicações PHP like a BOSS

Depurando aplicações PHP like a BOSS
Thiago Rodrigues
Eng. de Software Sr.
CI&T - PHPSP
Thiago Rodrigues
Bacharel em Sistemas de Informação pela
Universidade do Estado de Minas Gerais (UEMG);
Engenheiro de Software Sênior na CI&T
Programador PHP há 11 anos;
Evangelista PHPSP e co-organizador do PHPSP
Campinas
Entusiasta do software livre
Gammer
Depuração - O que é?
Definição formal:
Depuração (em inglês: debugging, debug) é o processo de encontrar e
reduzir defeitos num aplicativo de software ou mesmo em hardware. [..]
https://pt.wikipedia.org/wiki/Depuração
● diariamente despendemos esforço considerável
● é um processo analítico
● é um processo repetitivo
● é incremental (dividir para conquistar)
● pode haver muita pressão envolvida
Depuração - Habilidade necessária
O bom desenvolvedor é capaz de depurar e resolver
problemas com:
● tranquilidade
● efetividade
● produtividade
● clareza
● assertividade
Depuração - domínio de ferramentas
Para executar bem qualquer
trabalho é fundamental dominar
ferramentas que auxiliam na
execução do mesmo.
A habilidade de criar e usar
ferramentas foi e ainda é
fundamental para espécie humana.
Quais ferramentas vocês usam para depurar
aplicações PHP?
Ferramentas de depuração - Não existe bala de prata
Diferentes problemas demandam ferramentas
diferentes.
É fundamental conhecer diversas ferramentas,
entender quando usar e como usar.
Bê-a-bá da depuração de aplicações PHP
<?php echo 'Hello world!';
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
'frutas' => array(
'banana', 'maça', 'laranja'
),
'vegetais' => array(
'alface', 'rúcula', 'couve'
),
);
echo $vetor;
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
'frutas' => array(
'banana', 'maça', 'laranja'
),
'vegetais' => array(
'alface', 'rúcula', 'couve'
),
);
print_r($vetor);
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
'frutas' => array(
'banana', 'maça', 'laranja'
),
'vegetais' => array(
'alface', 'rúcula', 'couve'
),
);
echo '<pre>';
print_r($vetor);
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
'',
NULL,
'laranja',
123,
'123',
1.0,
'1.0',
);
echo '<pre>';
print_r($vetor);
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
'',
NULL,
'laranja',
123,
'123',
1.0,
'1.0',
);
echo '<pre>';
var_dump($vetor);
Bê-a-bá da depuração de aplicações PHP
<?php
$vetor = array(
// elementos
);
ob_start();
echo '<pre>';
var_dump($vetor);
$info = ob_get_clean();
file_put_contents('/tmp/debug.html',
$info);
echo 'Oi ;)';
Problemas comuns da abordagem "imprimir na tela"
● Esforço repetitivo
● Não exibe todo o contexto de variáveis
● Dificulta o entendimento de estruturas de dados complexas
● Requer a quebra de funcionalidade para testes em produção
○ Você pode se dar a esse luxo? O que os usuários vão pensar?
● Desperdiça-se muito tempo tentando identificar fluxos complexos imprimindo
valores seguido da função exit() ou die().
● De vez em quando algum desses echo/print_r/var_dump são esquecidos,
acarretando na quebra de funcionalidades ou do layout.
● Identificação de problemas de performance é extremamente onerosa
Ensino fundamental da depuração de aplicações PHP
Ajustar php.ini para exibir qualquer tipo de erro:
error_reporting = E_ALL
display_errors = On # Desligar em PROD.
Verificar logs do servidor web enquanto as requisições estão
ocorrendo (stream):
sudo tail -f /var/log/apache2/error.log [outro/file]
Tipos de depuração
Debugging
Conecta-se ao software e controla o fluxo de execução da
aplicação e obtém seu estado.
Tracing
Imprime informações em momentos chaves, tais como a pilha de
execução da aplicação.
Profiling
Coleta e mensura diversos dados estatísticos da aplicação, tais como
tempo de execução, memória utilizada, quantidades de chamadas, etc.
Xdebug
A mais poderosa ferramenta de depuração PHP.
Principais funcionalidades:
● Debugging
● Tracing
● Profiling
● Proteção contra loop infinito
● Deixa o var_dump bonito
Xdebug - Instalação
No Linux:
sudo apt-get install php5-xdebug
No Mac (usando brew):
sudo brew install php56-xdebug
Xdebug - Tracing
Xdebug - "embeleza" o var_dump
Xdebug - Configurando depuração remota
No servidor web - xdebug.ini:
xdebug.remote_connect_back=1
xdebug.remote_enable=1
Túnel SSH (necessário somente para aplicações remotas)
ssh -R 9000:localhost:9000 thiago@site.com
Xdebug - Configurando depuração remota no PHPStorm
1) Abra a janela Preferences e navegue até PHP > Servers.
2) Preencha o Name, Host e Porta do servidor PHP.
3) Se for um servidor remoto, habilite "Use path mappings" e mapeie a
raiz do projeto local com o caminho absoluto do projeto no servidor remoto.
4) Clique em OK para salvar e fechar a janela.
Xdebug - Configurando depuração remota no PHPStorm
1) Vá até o menu Run e clique em Edit Configurations.
2) Clique no botão + e depois em PHP Web Application.
3) Preencha o campo Name; no campo Server selecione o servidor
criado no slide anterior e coloque / em Start URL.
4) Clique em OK para salvar e fechar a janela.
Xdebug - Iniciando a depuração no PHPStorm
Se a depuração for remota, criar o túnel SSH antes.
1) Vá até o menu Run e clique em Debug 'nome'.
2) Será aberto uma janela do navegador.
Xdebug - Tela de depuração no PHPStorm
Xdebug - Depuração no PHPStorm
clique na imagem p/abrir o
vídeo no YouTube
Xdebug - Configurando profiling
xdebug.ini
xdebug.profiler_enable_trigger=1
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/var/www/phpsp"
Visite o site, note que ele criará alguns arquivos cachegrind.out na pasta
especificada.
No PHPStorm:
Acesse Tools > Analyze Xdebug Profiler Snapshot e selecione algum
arquivo cachegrind.out.
Xdebug - Analisando profiling no PHPStorm
clique na imagem p/abrir o
vídeo no YouTube
Xdebug - Analisando profiling no KCachegrind
XHProf
Ferramenta para profiling.
XHProf - Gráfico de chamadas
Drupal 8 - Webprofiler
Blackfire - outra ferramenta de profiling
Conclusão
● Precisa checar uma estrutura de dados básica? var_dump
● Precisa investigar o fluxo de execução? Xdebug
● Precisa investigar uma estrutura de dados complexa? Xdebug
● Precisa melhorar a performance de uma página? Utilize uma ferramenta
de profiling antes de sair atirando para todo lado.
Invista seu tempo em ferramentas de depuração para ganhar
produtividade.
Contato
xthiago@gmail.com
xthiago.com
+ PHP dia 20/agosto em Campinas:
phpspima.com.br
1 of 36

Recommended

Impacto dos frameworks PHP by
Impacto dos frameworks PHPImpacto dos frameworks PHP
Impacto dos frameworks PHPThiago Rodrigues
1K views25 slides
Construção e provisionamento de ambientes de desenvolvimento virtualizados by
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
1.1K views30 slides
1001 maneiras de debugar o WordPress by
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPressRudá Almeida
101 views33 slides
Criando microsserviços em PHP by
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
2.9K views45 slides
O que esperar do framework Laminas by
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework LaminasFlávio Lisboa
1.6K views28 slides
Behavior-Driven Development (BDD) - Abril/2017 by
Behavior-Driven Development (BDD) - Abril/2017Behavior-Driven Development (BDD) - Abril/2017
Behavior-Driven Development (BDD) - Abril/2017Renato Groff
1.2K views24 slides

More Related Content

What's hot

.NET Core e Testes de Unidade - Visual Studio Summit 2017 by
.NET Core e Testes de Unidade - Visual Studio Summit 2017.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017Renato Groff
537 views11 slides
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev... by
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Renato Groffe
449 views9 slides
PHP: Como não programar em POG by
PHP: Como não programar em POGPHP: Como não programar em POG
PHP: Como não programar em POGCicero Joasyo Mateus de Moura
330 views41 slides
Performance de verdade com Phalcon Framework by
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkJaime Neto
730 views26 slides
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD... by
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD....NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...Renato Groffe
709 views13 slides
Behavior-Driven Development (BDD) - QA Ninja Conf 2016 by
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Renato Groff
664 views34 slides

What's hot(20)

.NET Core e Testes de Unidade - Visual Studio Summit 2017 by Renato Groff
.NET Core e Testes de Unidade - Visual Studio Summit 2017.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017
Renato Groff537 views
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev... by Renato Groffe
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Renato Groffe449 views
Performance de verdade com Phalcon Framework by Jaime Neto
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon Framework
Jaime Neto730 views
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD... by Renato Groffe
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD....NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
Renato Groffe709 views
Behavior-Driven Development (BDD) - QA Ninja Conf 2016 by Renato Groff
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Renato Groff664 views
Testes de interfaces Web com Selenium by Renato Groff
Testes de interfaces Web com SeleniumTestes de interfaces Web com Selenium
Testes de interfaces Web com Selenium
Renato Groff939 views
Behavior-Driven Development (BDD) - DevOps Summit 2016 by Renato Groff
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
Renato Groff882 views
Test-Driven Development (TDD) - MSP Coding Day by Renato Groff
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding Day
Renato Groff378 views
Contribuindo e criando software livre by Vitor Mattos
Contribuindo e criando software livreContribuindo e criando software livre
Contribuindo e criando software livre
Vitor Mattos437 views
Dicas para sua carreira de Desenvolvedor PHP by Douglas V. Pasqua
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
Douglas V. Pasqua743 views
Zend Framework: Reuso e extensão de componentes para fácil manutenção by Flávio Lisboa
Zend Framework: Reuso e extensão de componentes para fácil manutençãoZend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutenção
Flávio Lisboa756 views
Certificação Zend Framework by Jaime Neto
Certificação Zend FrameworkCertificação Zend Framework
Certificação Zend Framework
Jaime Neto1.3K views
Pense no futuro: PHP com Zend Framework by Flávio Lisboa
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
Flávio Lisboa610 views
Mocking Test - QA Ninja Conf 2016 by Renato Groff
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016
Renato Groff427 views
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC by Flávio Lisboa
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Flávio Lisboa5.9K views
BDD (Behavior-Driven Development) - Setembro/2015 by Renato Groff
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
Renato Groff1.6K views
Ferramentas Livres Para Desenvolvimento com PHP by Adler Medrado
Ferramentas Livres Para Desenvolvimento com PHPFerramentas Livres Para Desenvolvimento com PHP
Ferramentas Livres Para Desenvolvimento com PHP
Adler Medrado3.8K views

Viewers also liked

Modern PHP by
Modern PHPModern PHP
Modern PHPAri Stopassola Junior
1.4K views100 slides
DevOps by
DevOpsDevOps
DevOpsRafael Azevedo
2K views25 slides
DEV-OPS para teste de software by
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de softwareQualister
1.4K views21 slides
Doctrine for Dummies by
Doctrine for DummiesDoctrine for Dummies
Doctrine for DummiesAri Stopassola Junior
571 views40 slides
DevOps by
DevOpsDevOps
DevOpsMatthew Jones
74.2K views47 slides
DevOps: A Culture Transformation, More than Technology by
DevOps: A Culture Transformation, More than TechnologyDevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than TechnologyCA Technologies
33.5K views44 slides

Viewers also liked(9)

Similar to Depurando aplicações PHP like a BOSS

Qualidade em projetos PHP - PHPSC Conf 2011 by
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
360 views55 slides
Qualidade em projetos PHP - SoLiSC 2011 by
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Luís Cobucci
307 views52 slides
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ... by
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
44 views48 slides
Xdebug seus problemas acabaram - tdc floripa 2017 by
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
480 views48 slides
Design for change: Fatores que influenciam na longevidade de um Software PHP by
Design for change: Fatores que influenciam na longevidade de um Software PHPDesign for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHPPablo Dall'Oglio
1.8K views44 slides
Kyrios: Infra-estrutura livre para desenvolvimento de software by
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareFábio Nogueira de Lucena
813 views57 slides

Similar to Depurando aplicações PHP like a BOSS(20)

Qualidade em projetos PHP - PHPSC Conf 2011 by Luís Cobucci
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
Luís Cobucci360 views
Qualidade em projetos PHP - SoLiSC 2011 by Luís Cobucci
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
Luís Cobucci307 views
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ... by tdc-globalcode
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
tdc-globalcode44 views
Xdebug seus problemas acabaram - tdc floripa 2017 by Vitor Mattos
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
Vitor Mattos480 views
Design for change: Fatores que influenciam na longevidade de um Software PHP by Pablo Dall'Oglio
Design for change: Fatores que influenciam na longevidade de um Software PHPDesign for change: Fatores que influenciam na longevidade de um Software PHP
Design for change: Fatores que influenciam na longevidade de um Software PHP
Pablo Dall'Oglio1.8K views
Phpjedi 090307090434-phpapp01 2 by PrinceGuru MS
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS490 views
PHP Jedi - Boas Práticas e Alta Performance by Felipe Ribeiro
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
Felipe Ribeiro7.8K views
Webinar: Debugging em Linux embarcado by Embarcados
Webinar: Debugging em Linux embarcadoWebinar: Debugging em Linux embarcado
Webinar: Debugging em Linux embarcado
Embarcados605 views
Google App Engine e PHP by Luiz Messias
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
Luiz Messias638 views
Seu framework é melhor pra quê? by Jaime Neto
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
Jaime Neto248 views
Fatores que influenciam na longevidade de um Software by Pablo Dall'Oglio
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um Software
Pablo Dall'Oglio760 views
Automação de testes para equipes agile by Alini Rebonatto
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agile
Alini Rebonatto931 views

Depurando aplicações PHP like a BOSS

  • 1. Depurando aplicações PHP like a BOSS Thiago Rodrigues Eng. de Software Sr. CI&T - PHPSP
  • 2. Thiago Rodrigues Bacharel em Sistemas de Informação pela Universidade do Estado de Minas Gerais (UEMG); Engenheiro de Software Sênior na CI&T Programador PHP há 11 anos; Evangelista PHPSP e co-organizador do PHPSP Campinas Entusiasta do software livre Gammer
  • 3. Depuração - O que é? Definição formal: Depuração (em inglês: debugging, debug) é o processo de encontrar e reduzir defeitos num aplicativo de software ou mesmo em hardware. [..] https://pt.wikipedia.org/wiki/Depuração ● diariamente despendemos esforço considerável ● é um processo analítico ● é um processo repetitivo ● é incremental (dividir para conquistar) ● pode haver muita pressão envolvida
  • 4. Depuração - Habilidade necessária O bom desenvolvedor é capaz de depurar e resolver problemas com: ● tranquilidade ● efetividade ● produtividade ● clareza ● assertividade
  • 5. Depuração - domínio de ferramentas Para executar bem qualquer trabalho é fundamental dominar ferramentas que auxiliam na execução do mesmo. A habilidade de criar e usar ferramentas foi e ainda é fundamental para espécie humana.
  • 6. Quais ferramentas vocês usam para depurar aplicações PHP?
  • 7. Ferramentas de depuração - Não existe bala de prata Diferentes problemas demandam ferramentas diferentes. É fundamental conhecer diversas ferramentas, entender quando usar e como usar.
  • 8. Bê-a-bá da depuração de aplicações PHP <?php echo 'Hello world!';
  • 9. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( 'frutas' => array( 'banana', 'maça', 'laranja' ), 'vegetais' => array( 'alface', 'rúcula', 'couve' ), ); echo $vetor;
  • 10. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( 'frutas' => array( 'banana', 'maça', 'laranja' ), 'vegetais' => array( 'alface', 'rúcula', 'couve' ), ); print_r($vetor);
  • 11. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( 'frutas' => array( 'banana', 'maça', 'laranja' ), 'vegetais' => array( 'alface', 'rúcula', 'couve' ), ); echo '<pre>'; print_r($vetor);
  • 12. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( '', NULL, 'laranja', 123, '123', 1.0, '1.0', ); echo '<pre>'; print_r($vetor);
  • 13. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( '', NULL, 'laranja', 123, '123', 1.0, '1.0', ); echo '<pre>'; var_dump($vetor);
  • 14. Bê-a-bá da depuração de aplicações PHP <?php $vetor = array( // elementos ); ob_start(); echo '<pre>'; var_dump($vetor); $info = ob_get_clean(); file_put_contents('/tmp/debug.html', $info); echo 'Oi ;)';
  • 15. Problemas comuns da abordagem "imprimir na tela" ● Esforço repetitivo ● Não exibe todo o contexto de variáveis ● Dificulta o entendimento de estruturas de dados complexas ● Requer a quebra de funcionalidade para testes em produção ○ Você pode se dar a esse luxo? O que os usuários vão pensar? ● Desperdiça-se muito tempo tentando identificar fluxos complexos imprimindo valores seguido da função exit() ou die(). ● De vez em quando algum desses echo/print_r/var_dump são esquecidos, acarretando na quebra de funcionalidades ou do layout. ● Identificação de problemas de performance é extremamente onerosa
  • 16. Ensino fundamental da depuração de aplicações PHP Ajustar php.ini para exibir qualquer tipo de erro: error_reporting = E_ALL display_errors = On # Desligar em PROD. Verificar logs do servidor web enquanto as requisições estão ocorrendo (stream): sudo tail -f /var/log/apache2/error.log [outro/file]
  • 17. Tipos de depuração Debugging Conecta-se ao software e controla o fluxo de execução da aplicação e obtém seu estado. Tracing Imprime informações em momentos chaves, tais como a pilha de execução da aplicação. Profiling Coleta e mensura diversos dados estatísticos da aplicação, tais como tempo de execução, memória utilizada, quantidades de chamadas, etc.
  • 18. Xdebug A mais poderosa ferramenta de depuração PHP. Principais funcionalidades: ● Debugging ● Tracing ● Profiling ● Proteção contra loop infinito ● Deixa o var_dump bonito
  • 19. Xdebug - Instalação No Linux: sudo apt-get install php5-xdebug No Mac (usando brew): sudo brew install php56-xdebug
  • 21. Xdebug - "embeleza" o var_dump
  • 22. Xdebug - Configurando depuração remota No servidor web - xdebug.ini: xdebug.remote_connect_back=1 xdebug.remote_enable=1 Túnel SSH (necessário somente para aplicações remotas) ssh -R 9000:localhost:9000 thiago@site.com
  • 23. Xdebug - Configurando depuração remota no PHPStorm 1) Abra a janela Preferences e navegue até PHP > Servers. 2) Preencha o Name, Host e Porta do servidor PHP. 3) Se for um servidor remoto, habilite "Use path mappings" e mapeie a raiz do projeto local com o caminho absoluto do projeto no servidor remoto. 4) Clique em OK para salvar e fechar a janela.
  • 24. Xdebug - Configurando depuração remota no PHPStorm 1) Vá até o menu Run e clique em Edit Configurations. 2) Clique no botão + e depois em PHP Web Application. 3) Preencha o campo Name; no campo Server selecione o servidor criado no slide anterior e coloque / em Start URL. 4) Clique em OK para salvar e fechar a janela.
  • 25. Xdebug - Iniciando a depuração no PHPStorm Se a depuração for remota, criar o túnel SSH antes. 1) Vá até o menu Run e clique em Debug 'nome'. 2) Será aberto uma janela do navegador.
  • 26. Xdebug - Tela de depuração no PHPStorm
  • 27. Xdebug - Depuração no PHPStorm clique na imagem p/abrir o vídeo no YouTube
  • 28. Xdebug - Configurando profiling xdebug.ini xdebug.profiler_enable_trigger=1 xdebug.profiler_enable=1 xdebug.profiler_output_dir="/var/www/phpsp" Visite o site, note que ele criará alguns arquivos cachegrind.out na pasta especificada. No PHPStorm: Acesse Tools > Analyze Xdebug Profiler Snapshot e selecione algum arquivo cachegrind.out.
  • 29. Xdebug - Analisando profiling no PHPStorm clique na imagem p/abrir o vídeo no YouTube
  • 30. Xdebug - Analisando profiling no KCachegrind
  • 32. XHProf - Gráfico de chamadas
  • 33. Drupal 8 - Webprofiler
  • 34. Blackfire - outra ferramenta de profiling
  • 35. Conclusão ● Precisa checar uma estrutura de dados básica? var_dump ● Precisa investigar o fluxo de execução? Xdebug ● Precisa investigar uma estrutura de dados complexa? Xdebug ● Precisa melhorar a performance de uma página? Utilize uma ferramenta de profiling antes de sair atirando para todo lado. Invista seu tempo em ferramentas de depuração para ganhar produtividade.
  • 36. Contato xthiago@gmail.com xthiago.com + PHP dia 20/agosto em Campinas: phpspima.com.br

Editor's Notes

  1. Me apresentar
  2. (((Para quebrar um pouco o gelo))) Antes de começar a falar sobre o tema gostaria de fazer uma pesquisa aqui. 1) Quem aqui já escutou essa frase no trabalho? 2) Agora sejam sinceros, quem aqui já falou essa frase? (Se quase ninguém falar, dizer: mentirosos! haha)
  3. Afinal, o que é "ambiente de desenvolvimento"? Como o nome sugere, trata-se de todo o ecosistema onde desenvolvemos nossa aplicação. Tal ecosistema possui toda pilha de software necessária para rodar a aplicação que estamos desenvolvendo e geralmente fica no computador do desenvolvedor e é semelhante ao ambiente de produção, isto é, o ambiente que o usuário final usa. Além disso, geralmente instalamos ferramentas que nos auxiliam no desenvolvimento, tal como depurador, scripts que automatizam tarefas, etc.
  4. Eis aqui um exemplo da pilha de software requerida para ter o Drupal 8 rodando em um ambiente. (Comentar rapidamente sobre cada um dos pontos). Ao final, ressaltar: construir um ambiente de desenvolvimento não é simples, tampouco trivial.
  5. Problema muito comum de muitos projetos. O que tem que ser instalado? Qual versão? Qual a configuração é necessária? Será que vão lembrar 1 ano depois? E quando entrar um desenvolvedor novo? Comentar sobre quando entrei na Templum (n vou citar nome) - a cada semana, enquanto desenvolvia, me deparava com problemas que só depois descobria que faltava a instalação de um determinado módulo, a criação de um link simbólico e coisas do tipo.
  6. Como agir quando precisamos atualizar a versão do PHP e precisamos que todos os desenvolvedores o façam? Vamos pedir um a um? Será que todos farão? Sempre vai ter um cara que vai deixar para depois e esquecer de fazer, e como a lei de murphy prega, provavelmente vai impactar no futuro em algum bug. Além disso, como os demais membros do time podem contribuir? É fundamental que todos os membros do time conheçam toda a pilha de tecnologia.
  7. Quanto tempo o desenvolvedor vai levar para preparar o ambiente? É muito comum desenvolvedores ficarem construindo o ambiente por 1 ou 2 dias, assim como a necessidade da ajuda de outros membros do time. Construir o ambiente sem dúvida é um processo penoso.
  8. Ferramentas como o XAMMP são terríveis porque no geral são muito distoantes do ambiente onde a aplicação roda.
  9. A Virtualização do ambiente de desenvolvimento permite mitigar todos os problemas expostos anteriormente. Ela permite (explicar os pontos).
  10. Explicar a diferença arquitetural entre ambas de forma sucinta.
  11. TODO: colocar esse Vagrantfile e o bootstrap.sh em um gist
  12. TODO: colocar esse Vagrantfile e o bootstrap.sh em um gist
  13. TODO: colocar esse Vagrantfile e o bootstrap.sh em um gist
  14. TODO: colocar esse Vagrantfile e o bootstrap.sh em um gist