SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

.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
.NET Core e Testes de Unidade - Visual Studio Summit 2017Renato Groff
 
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...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Renato Groffe
 
Performance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkJaime Neto
 
.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...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...Renato Groffe
 
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Renato Groff
 
Testes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumTestes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumRenato Groff
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Renato Groff
 
Test-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayRenato Groff
 
Contribuindo e criando software livre
Contribuindo e criando software livreContribuindo e criando software livre
Contribuindo e criando software livreVitor Mattos
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Zend Framework: Reuso e extensão de componentes para fácil manutenção
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çãoFlávio Lisboa
 
Certificação Zend Framework
Certificação Zend FrameworkCertificação Zend Framework
Certificação Zend FrameworkJaime Neto
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Renato Groff
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
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º SOLISCFlávio Lisboa
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015Renato Groff
 
Programe a eficácia do seu código
Programe a eficácia do seu códigoPrograme a eficácia do seu código
Programe a eficácia do seu códigoAna Claudia Nogueira
 
Ferramentas Livres Para Desenvolvimento com PHP
Ferramentas Livres Para Desenvolvimento com PHPFerramentas Livres Para Desenvolvimento com PHP
Ferramentas Livres Para Desenvolvimento com PHPAdler Medrado
 

Mais procurados (20)

.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
.NET Core e Testes de Unidade - Visual Studio Summit 2017
 
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...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
 
PHP: Como não programar em POG
PHP: Como não programar em POGPHP: Como não programar em POG
PHP: Como não programar em POG
 
Performance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon Framework
 
.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...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
 
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
 
Testes de interfaces Web com Selenium
Testes de interfaces Web com SeleniumTestes de interfaces Web com Selenium
Testes de interfaces Web com Selenium
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
 
Test-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding Day
 
Contribuindo e criando software livre
Contribuindo e criando software livreContribuindo e criando software livre
Contribuindo e criando software livre
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Zend Framework: Reuso e extensão de componentes para fácil manutenção
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
 
Certificação Zend Framework
Certificação Zend FrameworkCertificação Zend Framework
Certificação Zend Framework
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
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
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 
Programe a eficácia do seu código
Programe a eficácia do seu códigoPrograme a eficácia do seu código
Programe a eficácia do seu código
 
Ferramentas Livres Para Desenvolvimento com PHP
Ferramentas Livres Para Desenvolvimento com PHPFerramentas Livres Para Desenvolvimento com PHP
Ferramentas Livres Para Desenvolvimento com PHP
 

Destaque

Destaque (9)

Modern PHP
Modern PHPModern PHP
Modern PHP
 
DevOps
DevOpsDevOps
DevOps
 
DEV-OPS para teste de software
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de software
 
Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
DevOps
DevOpsDevOps
DevOps
 
DevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than TechnologyDevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than Technology
 
Introducing DevOps
Introducing DevOpsIntroducing DevOps
Introducing DevOps
 
DevOps 101
DevOps 101DevOps 101
DevOps 101
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 

Semelhante a Depurando aplicações PHP like a BOSS

Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Luís Cobucci
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
 
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 ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Design for change: Fatores que influenciam na longevidade de um Software PHP
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
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
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
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
Webinar: Debugging em Linux embarcado
Webinar: Debugging em Linux embarcadoWebinar: Debugging em Linux embarcado
Webinar: Debugging em Linux embarcadoEmbarcados
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHPLuiz Messias
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwarePablo Dall'Oglio
 
Drupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDrupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDaniel Carvalhinho
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agileAlini Rebonatto
 

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

Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
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 ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Design for change: Fatores que influenciam na longevidade de um Software PHP
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
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de software
 
Cake Php
Cake PhpCake Php
Cake Php
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Webinar: Debugging em Linux embarcado
Webinar: Debugging em Linux embarcadoWebinar: Debugging em Linux embarcado
Webinar: Debugging em Linux embarcado
 
A Linguagem Php
A Linguagem PhpA Linguagem Php
A Linguagem Php
 
Debugging node
Debugging nodeDebugging node
Debugging node
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Fatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um SoftwareFatores que influenciam na longevidade de um Software
Fatores que influenciam na longevidade de um Software
 
Drupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDrupal e a Qualidade de Software
Drupal e a Qualidade de Software
 
CakePHP
CakePHPCakePHP
CakePHP
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agile
 
Engenharia reversa
Engenharia reversaEngenharia reversa
Engenharia reversa
 

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

Notas do Editor

  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