SlideShare uma empresa Scribd logo
Seus problemas acabaram
By: Vitor Mattos
Desenvolvedor PHP desde 2003
Amante de opensource
Evangelista PHP
PHP Zend Certified Engineer ( ZEND024235 )
PHPRio ( https://telegram.me/phprio )
Redes sociais: ( procure por vitormattos )
Quem sou eu?
Ide, e anunciai que o
@PHPeste está próximo.
Deixai o PHP falar por tua
boca, e alertai aos nativos do
TDC que a chegada de
Rasmus Lerdorf é esperada, e
fale ao povo de Java que ainda
é tempo de conversão. Fazei
isso em memória da
comunidade.
Alessandro Feitoza
Evangelista PHP
Falaremos sobre:
Sumário:
● O que é o xdebug?
● Porque usar o xdebug?
● Instalação
● Primeiros passos
○ Variáveis amigáveis
○ Xdebug na linha de comando
○ Removendo pogs
● Depurando em tempo real
● Code coverage
● Profiling
O que é o xdebug?
O Xdebug é uma extensão que te ajuda a depurar seus scripts fornecendo uma
grande quantidade de informações valiosas.
● Disponível desde 2002
● Desenvolvido por Derick Rethans
● Extensão para o PHP
● Escrita em C
● Open source
● Usado para debugar e otimizar aplicações
● Utiliza o protocolo DBGp (DeBugGer Protocol) para comunicação
● Te permite fazer profiling da aplicação
● Análise de cobertura de código
!=
Por uma vida mais saudável
O que é o xdebug?
Porque usar xdebug?
Debugando sem xdebug
Porque usar xdebug?
Debugando sem xdebug
<?php
echo $variavel;
echo '<pre>';
var_dump($um_array);
echo '</pre>';
print_r($mais_uma);
error_log('passei aqui', 3, '/var/log/app/meu.log');
exit();
Porque usar xdebug?
Debugando sem xdebug
● Alterar algo na aplicação
● Recarregar a página
● Verificar como ficou
● Modificar novamente o código
● Imprimir mais variáveis
● Repetir tudo novamente
● Esquecer de limpar os debug ou de tirar um exit
● Mandar para o chefe testar a aplicação
Porque usar xdebug?
Debugando com xdebug
● Adicione um breakpoint
● Execute a aplicação
● Volte para a sua IDE e confira seu código
● Confira o valor de variáveis em tempo real
● Veja todo o backtrace de execução da aplicação
Dica: Faça testes unitários
Instalação - repositório
Funciona em qualquer ambiente que execute PHP, em distribuições Linux
baseadas em Debian, faça da seguinte forma:
~$ sudo apt-get install php-xdebug
O manual completo da extensão você encontra em:
xdebug.org
Conferindo instalação
~$ php -v
PHP 7.1.4-1+deb.sury.org~zesty+1 (cli) (built: Apr 11 2017 22:16:52) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.4-1, Copyright (c) 1999-2017, by Zend Technologies
with Xdebug v2.5.1, Copyright (c) 2002-2017, by Derick Rethans
Instalação - PECL
~$ sudo pecl install xdebug
Conferindo instalação
~$ php -v
PHP 7.1.4-1+deb.sury.org~zesty+1 (cli) (built: Apr 11 2017 22:16:52) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.4-1, Copyright (c) 1999-2017, by Zend Technologies
with Xdebug v2.5.3, Copyright (c) 2002-2017, by Derick Rethans
Instalação - código fonte
~$ sudo apt-get install php phpize git
~$ git clone git://github.com/xdebug/xdebug.git
~$ cd xdebug/
~/xdebug$ phpize
~/xdebug$ ./configure --enable-xdebug
~/xdebug$ make
~/xdebug$ sudo make install
Conferindo instalação
~$ php -v
PHP 7.1.4-1+deb.sury.org~zesty+1 (cli) (built: Apr 11 2017 22:16:52) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.4-1, Copyright (c) 1999-2017, by Zend Technologies
with Xdebug v2.6.0-dev, Copyright (c) 2002-2017, by Derick Rethans
Outras formas de certificar que a instalação está ok:
~$ cat /etc/php/7.1/mods-available/xdebug.ini
zend_extension=xdebug.so
~$ php --ri xdebug
~$ php -m
Em alguns casos colocar apenas o nome do binário dá problema, então, se tiver
problemas, coloque o caminho absoluto do binátio do xdebug.
Lembre sempre de reiniciar o servidor.
Conferindo instalação
Arquivo de configuração - xdebug.ini
zend_extension=xdebug.so
[xdebug]
xdebug.default_enable=on
xdebug.remote_enable=on
xdebug.remote_autostart=on
xdebug.profiler_output_name = cachegrind.out.%u.%s.%R
xdebug.profiler_enable = 0
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_log=/tmp/xdebug.log
;xdebug.remote_host=remote.mypage.com
xdebug.scream=0
xdebug.cli_color=On
xdebug.var_display_max_depth=10
xdebug.var_display_max_children=200
xdebug.overload_var_dump = 1
xdebug.show_exception_trace = Off
xdebug.trace_format = 1
; for get memory usage, uncoment the following lines and run this script:
; https://github.com/derickr/xdebug/raw/master/contrib/tracefile-analyser.php
; xdebug.collect_return = 1
; xdebug.auto_trace = 1
; xdebug.show_mem_delta=1
Calma, vamos entrar em detalhes mais a frente.
Qualquer dúvida, consulte o manual:
https://xdebug.org/docs/all_settings
Variáveis amigáveis - browser
O xdebug faz um monte de texto ilegível...
Variáveis amigáveis - browser
Variáveis amigáveis - browser
Virar isto!
Variáveis amigáveis - browser
E ainda pode melhorar!
Variáveis amigáveis - browser
xdebug.dump.*
No * pode colocar COOKIE, FILES, GET, POST, REQUEST, SERVER,
SESSION:
xdebug.dump.GET=*
E ainda pode filtrar:
xdebug.dump.SERVER=REMOTE_ADDR,REQUEST_METHOD
Variáveis amigáveis - cli
zend_extension=xdebug.so
[xdebug]
xdebug.default_enable=on
xdebug.cli_color=On
xdebug.var_display_max_depth=10
xdebug.var_display_max_children=200
xdebug.overload_var_dump=1
POG do desespero
É possível ocultar alguns erros no PHP com o @
Porém, é possível exibir novamente com o xdebug
xdebug.scream=1
http://xdebug.org/docs/stack_trace
http://php.net/manual/language.operators.errorcontrol.php
Evitando falhas de recursividade
xdebug.max_nesting_level=3
~/projetos/palestra-xdebug$ php recursive.php
PHP Fatal error: Maximum function nesting level of '3' reached,
aborting! in /home/vitor/projetos/palestra-xdebug/recursive.php on line 2
PHP Stack trace:
PHP 1. {main}() /home/vitor/projetos/palestra-xdebug/recursive.php:0
PHP 2. a() /home/vitor/projetos/palestra-xdebug/recursive.php:5
PHP 3. a() /home/vitor/projetos/palestra-xdebug/recursive.php:3
Debugando ao vivo
DBGp - DeBugGer: protocolo de debugging
Cross-language: comum para várias linguagens (PHP, HHVM, Python, Perl,...)
Compatível com diversos clientes
Possibilidade de alterar valor de algumas variáveis variáveis em tempo de
execução
Debugging remoto
Debugging condicional
Clientes
● PHPEclipse (Editor Plugin).
● JetBrain's PhpStorm (IDE; Commercial).
● VIM plugin (Editor Plugin).
● Emacs plugin (Editor Plugin).
● NetBeans (IDE: Windows, Linux, Mac OS X and Solaris).
● Notepad++ plugin (Editor: Windows).
● Dev-PHP (IDE: Windows)
● Eclipse plugin (IDE).
● KDevelop (IDE: Linux (KDE); Open Source).
● ActiveState's Komodo (IDE: Windows, Linux, Mac; Commercial).
● …
https://xdebug.org/docs/remote
Xdebug no Eclipse
Xdebug no Eclipse
1
Xdebug no Eclipse
2
1
3
4
Xdebug no Eclipse
3
2
1
Xdebug no Eclipse
1
2
3
4
5
Arquivo de configuração - xdebug.ini
zend_extension=xdebug.so
[xdebug]
xdebug.default_enable=on
xdebug.remote_autostart=on
OBS: TDD + PHPUnit também é importante!
Ações ao debugar
Set breakpoint
Step into
Step opver
Step return
Run to cursor
Resume
Terminate
Habilitando e desabilitando
Algumas IDEs necessitam de dar start e stop para iniciar o debugging, existem
extensões para diversos navegadores para fazer isto de forma prática. Caso não
queira extensões, há outras formas de iniciar e parar para algumas IDE (GET,
COOKIE) ou diretamente no arquivo ini
● Chrome
○ Xdebug helper
○ Xdebug enabler
● Firefox
○ easy Xdebug
○ The easiest Xdebug
● Safari
○ Xdebug toogler
Quero ver ao vivo!
Talk is cheap.
Show me the code.
- Linus Torvalds
#Show
M
eTheC
ode
Coverage
./vendor/bin/phpunit --coverage-html coverage
Profiling
Profiler integrado do Xdebug que permite encontrar gargalos no script e
visualizá-los com uma ferramenta externa, como PHP Webgrind, MacAllGrind,
kcachegrind ou WinCacheGrind.
Profiling
xdebug.ini
xdebug.profiler_output_name = cachegrind.out.%u.%s.%R
xdebug.profiler_enable = 1
~$ apt-get install python graphviz
~$ git clone https://github.com/jokkedk/webgrind
~$ cd webgrind
~$ composer install
~$ php -S localhost:8000
Profiling - webgrind
Profiling - webgrind - gráfico de chamadas
Profiling - kcachegrind
O futuro
Good bye PHP 5, go PHP7!!!!
Falamos sobre:
Sumário:
● O que é o xdebug?
● Porque usar o xdebug?
● Instalação
● Primeiros passos
○ Variáveis amigáveis
○ Xdebug na linha de comando
○ Removendo pogs
● Depurando em tempo real
● Code coverage
● Profiling
Referências
https://xdebug.org/
http://php.net/
https://github.com/jokkedk/webgrind
http://kcachegrind.sourceforge.net
https://phpunit.de/
https://derickrethans.nl/
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at PHP.
Perguntas
Redes sociais ( vitormattos )

Mais conteúdo relacionado

PDF
Xdebug seus problemas acabaram - TDC - PHPeste
PDF
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
PDF
Xdebug seus problemas acabaram - tdc floripa 2017
PDF
BDD: Torne viva a documentação de seus sistemas
PPTX
PHPSP TestFest 2010
PDF
PDF
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
PDF
Qualidade em projetos PHP - PHPSC Conf 2011
Xdebug seus problemas acabaram - TDC - PHPeste
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
Xdebug seus problemas acabaram - tdc floripa 2017
BDD: Torne viva a documentação de seus sistemas
PHPSP TestFest 2010
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
Qualidade em projetos PHP - PHPSC Conf 2011

Mais procurados (16)

PDF
Programando Software Livre em C
PDF
Qualidade em projetos PHP - SoLiSC 2011
PPT
Groovy: graxa nas engrenagens de Java
PDF
Novidades PHP 7.4 e 8.0!
PDF
Produtividade com ZF2, PDT & Zend Server Free Edition
PPTX
PHP 7 - A Maioridade do PHP
PPTX
NodeJS - Tutorial de forma simples e pratica.
PDF
Vagrant - ambiente de desenvolvimento virtualizado
PDF
Por que jenkins se posso usar deployer php
PDF
Curso de Groovy
PDF
Laravel + Vue: Como começar
PDF
Frameworks PHP
PDF
Arquitetura PHP para um mundo orientado a microsserviços
PDF
Consegi 2011: Puppet
PDF
Automação de tarefas com grunt
PPT
Python para programadores Ruby
Programando Software Livre em C
Qualidade em projetos PHP - SoLiSC 2011
Groovy: graxa nas engrenagens de Java
Novidades PHP 7.4 e 8.0!
Produtividade com ZF2, PDT & Zend Server Free Edition
PHP 7 - A Maioridade do PHP
NodeJS - Tutorial de forma simples e pratica.
Vagrant - ambiente de desenvolvimento virtualizado
Por que jenkins se posso usar deployer php
Curso de Groovy
Laravel + Vue: Como começar
Frameworks PHP
Arquitetura PHP para um mundo orientado a microsserviços
Consegi 2011: Puppet
Automação de tarefas com grunt
Python para programadores Ruby
Anúncio

Semelhante a TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at PHP. (20)

PDF
Construção e provisionamento de ambientes de desenvolvimento virtualizados
PDF
Depurando aplicações PHP like a BOSS
ODP
Depurando Aplicacoes PHP
PDF
1001 maneiras de debugar o WordPress
PDF
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
PDF
Google App Engine e PHP
PDF
Pense no futuro: PHP com Zend Framework
PDF
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
PPTX
Introdução ao NodeJS
ODP
Praticas DevOps Com ZendServer
PDF
Começando com Zend Framework 2
PPT
Nodejs justdigital
PDF
PHP Jedi - Boas Práticas e Alta Performance
PDF
Lab python django - parte 2 - python + virtualenv
PPTX
NodeJS Under the Hood - Concurrency and Multithreading
PDF
Depurando código PHP com Docker e Xdebug - PHPRS
PDF
Aplicações Profissionais para Internet com Zend Framework
PDF
Programação Multiplataforma em Ambiente Web
PPTX
Palestra microservice semanatic
PDF
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Depurando aplicações PHP like a BOSS
Depurando Aplicacoes PHP
1001 maneiras de debugar o WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Google App Engine e PHP
Pense no futuro: PHP com Zend Framework
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Introdução ao NodeJS
Praticas DevOps Com ZendServer
Começando com Zend Framework 2
Nodejs justdigital
PHP Jedi - Boas Práticas e Alta Performance
Lab python django - parte 2 - python + virtualenv
NodeJS Under the Hood - Concurrency and Multithreading
Depurando código PHP com Docker e Xdebug - PHPRS
Aplicações Profissionais para Internet com Zend Framework
Programação Multiplataforma em Ambiente Web
Palestra microservice semanatic
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Anúncio

Mais de tdc-globalcode (20)

PDF
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
PDF
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
PDF
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
PDF
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
PDF
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
PDF
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
PDF
TDC2019 Intel Software Day - Inferencia de IA em edge devices
PDF
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
PPT
Trilha .Net - Programacao funcional usando f#
PDF
TDC2018SP | Trilha Go - Case Easylocus
PDF
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
PDF
TDC2018SP | Trilha Go - Clean architecture em Golang
PDF
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
PDF
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
PDF
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
PDF
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
PDF
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
PDF
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
PDF
TDC2018SP | Trilha .Net - .NET funcional com F#
PDF
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - Inferencia de IA em edge devices
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha .Net - Programacao funcional usando f#
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core

Último (20)

PPTX
TREINAMENTO DE INSPETOR DE ANDAIMES.pptx
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PDF
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
PDF
metabolismo energtico das clulas-131017092002-phpapp02.pdf
PDF
Uma Introdução às Ciências do Alcorão (Islam)
PPSX
A epistemologia de Wilheim G Leibniz.ppsx
PDF
Formação politica brasil_2017.pptx.pdf
PPT
Elementos constituintes do esquema argumentativo (tese, argumento, tema, pont...
PPTX
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
PPT
HISTOLOGIA VEGETAL - tecidos vegetais.ppt
PDF
Combate a Incêndio - Hidrantes,Mangotinhos, Mangueiras de Incêndio, Acessóri...
PDF
Fiqh da adoração (islamismo)
DOCX
PLANEJAMENTO QUINZENAL - 18.08.2025 à 29.08.2025 - 2ºANO - PROFESSORA PATRÍCI...
PDF
O retorno a origem (islã Islamismo)
PDF
[Slides] A Literatura no ENEM 2017 (1).pdf
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PDF
Um dia na casa do Mensageiro (que a paz e benção de Deus estejam com ele)
PPTX
administraoemenfermagem e introdução de medicamento
PDF
EXPRESSÕES IDIOMÁTICAS - LÍNGUA PORTUGUESA
PPTX
norma regulamentadora numero vinte nr 20
TREINAMENTO DE INSPETOR DE ANDAIMES.pptx
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
metabolismo energtico das clulas-131017092002-phpapp02.pdf
Uma Introdução às Ciências do Alcorão (Islam)
A epistemologia de Wilheim G Leibniz.ppsx
Formação politica brasil_2017.pptx.pdf
Elementos constituintes do esquema argumentativo (tese, argumento, tema, pont...
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
HISTOLOGIA VEGETAL - tecidos vegetais.ppt
Combate a Incêndio - Hidrantes,Mangotinhos, Mangueiras de Incêndio, Acessóri...
Fiqh da adoração (islamismo)
PLANEJAMENTO QUINZENAL - 18.08.2025 à 29.08.2025 - 2ºANO - PROFESSORA PATRÍCI...
O retorno a origem (islã Islamismo)
[Slides] A Literatura no ENEM 2017 (1).pdf
Trabalho Cidades sustentáveis ou Utopia.pptx
Um dia na casa do Mensageiro (que a paz e benção de Deus estejam com ele)
administraoemenfermagem e introdução de medicamento
EXPRESSÕES IDIOMÁTICAS - LÍNGUA PORTUGUESA
norma regulamentadora numero vinte nr 20

TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team at PHP.

  • 2. Desenvolvedor PHP desde 2003 Amante de opensource Evangelista PHP PHP Zend Certified Engineer ( ZEND024235 ) PHPRio ( https://telegram.me/phprio ) Redes sociais: ( procure por vitormattos ) Quem sou eu?
  • 3. Ide, e anunciai que o @PHPeste está próximo. Deixai o PHP falar por tua boca, e alertai aos nativos do TDC que a chegada de Rasmus Lerdorf é esperada, e fale ao povo de Java que ainda é tempo de conversão. Fazei isso em memória da comunidade. Alessandro Feitoza Evangelista PHP
  • 4. Falaremos sobre: Sumário: ● O que é o xdebug? ● Porque usar o xdebug? ● Instalação ● Primeiros passos ○ Variáveis amigáveis ○ Xdebug na linha de comando ○ Removendo pogs ● Depurando em tempo real ● Code coverage ● Profiling
  • 5. O que é o xdebug? O Xdebug é uma extensão que te ajuda a depurar seus scripts fornecendo uma grande quantidade de informações valiosas. ● Disponível desde 2002 ● Desenvolvido por Derick Rethans ● Extensão para o PHP ● Escrita em C ● Open source ● Usado para debugar e otimizar aplicações ● Utiliza o protocolo DBGp (DeBugGer Protocol) para comunicação ● Te permite fazer profiling da aplicação ● Análise de cobertura de código
  • 6. != Por uma vida mais saudável O que é o xdebug?
  • 8. Porque usar xdebug? Debugando sem xdebug <?php echo $variavel; echo '<pre>'; var_dump($um_array); echo '</pre>'; print_r($mais_uma); error_log('passei aqui', 3, '/var/log/app/meu.log'); exit();
  • 9. Porque usar xdebug? Debugando sem xdebug ● Alterar algo na aplicação ● Recarregar a página ● Verificar como ficou ● Modificar novamente o código ● Imprimir mais variáveis ● Repetir tudo novamente ● Esquecer de limpar os debug ou de tirar um exit ● Mandar para o chefe testar a aplicação
  • 10. Porque usar xdebug? Debugando com xdebug ● Adicione um breakpoint ● Execute a aplicação ● Volte para a sua IDE e confira seu código ● Confira o valor de variáveis em tempo real ● Veja todo o backtrace de execução da aplicação Dica: Faça testes unitários
  • 11. Instalação - repositório Funciona em qualquer ambiente que execute PHP, em distribuições Linux baseadas em Debian, faça da seguinte forma: ~$ sudo apt-get install php-xdebug O manual completo da extensão você encontra em: xdebug.org
  • 12. Conferindo instalação ~$ php -v PHP 7.1.4-1+deb.sury.org~zesty+1 (cli) (built: Apr 11 2017 22:16:52) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.1.4-1, Copyright (c) 1999-2017, by Zend Technologies with Xdebug v2.5.1, Copyright (c) 2002-2017, by Derick Rethans
  • 13. Instalação - PECL ~$ sudo pecl install xdebug
  • 14. Conferindo instalação ~$ php -v PHP 7.1.4-1+deb.sury.org~zesty+1 (cli) (built: Apr 11 2017 22:16:52) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.1.4-1, Copyright (c) 1999-2017, by Zend Technologies with Xdebug v2.5.3, Copyright (c) 2002-2017, by Derick Rethans
  • 15. Instalação - código fonte ~$ sudo apt-get install php phpize git ~$ git clone git://github.com/xdebug/xdebug.git ~$ cd xdebug/ ~/xdebug$ phpize ~/xdebug$ ./configure --enable-xdebug ~/xdebug$ make ~/xdebug$ sudo make install
  • 16. Conferindo instalação ~$ php -v PHP 7.1.4-1+deb.sury.org~zesty+1 (cli) (built: Apr 11 2017 22:16:52) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.1.4-1, Copyright (c) 1999-2017, by Zend Technologies with Xdebug v2.6.0-dev, Copyright (c) 2002-2017, by Derick Rethans
  • 17. Outras formas de certificar que a instalação está ok: ~$ cat /etc/php/7.1/mods-available/xdebug.ini zend_extension=xdebug.so ~$ php --ri xdebug ~$ php -m Em alguns casos colocar apenas o nome do binário dá problema, então, se tiver problemas, coloque o caminho absoluto do binátio do xdebug. Lembre sempre de reiniciar o servidor. Conferindo instalação
  • 18. Arquivo de configuração - xdebug.ini zend_extension=xdebug.so [xdebug] xdebug.default_enable=on xdebug.remote_enable=on xdebug.remote_autostart=on xdebug.profiler_output_name = cachegrind.out.%u.%s.%R xdebug.profiler_enable = 0 xdebug.remote_port=9000 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=127.0.0.1 xdebug.remote_log=/tmp/xdebug.log ;xdebug.remote_host=remote.mypage.com xdebug.scream=0 xdebug.cli_color=On xdebug.var_display_max_depth=10 xdebug.var_display_max_children=200 xdebug.overload_var_dump = 1 xdebug.show_exception_trace = Off xdebug.trace_format = 1 ; for get memory usage, uncoment the following lines and run this script: ; https://github.com/derickr/xdebug/raw/master/contrib/tracefile-analyser.php ; xdebug.collect_return = 1 ; xdebug.auto_trace = 1 ; xdebug.show_mem_delta=1 Calma, vamos entrar em detalhes mais a frente. Qualquer dúvida, consulte o manual: https://xdebug.org/docs/all_settings
  • 19. Variáveis amigáveis - browser O xdebug faz um monte de texto ilegível...
  • 21. Variáveis amigáveis - browser Virar isto!
  • 22. Variáveis amigáveis - browser E ainda pode melhorar!
  • 23. Variáveis amigáveis - browser xdebug.dump.* No * pode colocar COOKIE, FILES, GET, POST, REQUEST, SERVER, SESSION: xdebug.dump.GET=* E ainda pode filtrar: xdebug.dump.SERVER=REMOTE_ADDR,REQUEST_METHOD
  • 24. Variáveis amigáveis - cli zend_extension=xdebug.so [xdebug] xdebug.default_enable=on xdebug.cli_color=On xdebug.var_display_max_depth=10 xdebug.var_display_max_children=200 xdebug.overload_var_dump=1
  • 25. POG do desespero É possível ocultar alguns erros no PHP com o @ Porém, é possível exibir novamente com o xdebug xdebug.scream=1 http://xdebug.org/docs/stack_trace http://php.net/manual/language.operators.errorcontrol.php
  • 26. Evitando falhas de recursividade xdebug.max_nesting_level=3 ~/projetos/palestra-xdebug$ php recursive.php PHP Fatal error: Maximum function nesting level of '3' reached, aborting! in /home/vitor/projetos/palestra-xdebug/recursive.php on line 2 PHP Stack trace: PHP 1. {main}() /home/vitor/projetos/palestra-xdebug/recursive.php:0 PHP 2. a() /home/vitor/projetos/palestra-xdebug/recursive.php:5 PHP 3. a() /home/vitor/projetos/palestra-xdebug/recursive.php:3
  • 27. Debugando ao vivo DBGp - DeBugGer: protocolo de debugging Cross-language: comum para várias linguagens (PHP, HHVM, Python, Perl,...) Compatível com diversos clientes Possibilidade de alterar valor de algumas variáveis variáveis em tempo de execução Debugging remoto Debugging condicional
  • 28. Clientes ● PHPEclipse (Editor Plugin). ● JetBrain's PhpStorm (IDE; Commercial). ● VIM plugin (Editor Plugin). ● Emacs plugin (Editor Plugin). ● NetBeans (IDE: Windows, Linux, Mac OS X and Solaris). ● Notepad++ plugin (Editor: Windows). ● Dev-PHP (IDE: Windows) ● Eclipse plugin (IDE). ● KDevelop (IDE: Linux (KDE); Open Source). ● ActiveState's Komodo (IDE: Windows, Linux, Mac; Commercial). ● … https://xdebug.org/docs/remote
  • 34. Arquivo de configuração - xdebug.ini zend_extension=xdebug.so [xdebug] xdebug.default_enable=on xdebug.remote_autostart=on OBS: TDD + PHPUnit também é importante!
  • 35. Ações ao debugar Set breakpoint Step into Step opver Step return Run to cursor Resume Terminate
  • 36. Habilitando e desabilitando Algumas IDEs necessitam de dar start e stop para iniciar o debugging, existem extensões para diversos navegadores para fazer isto de forma prática. Caso não queira extensões, há outras formas de iniciar e parar para algumas IDE (GET, COOKIE) ou diretamente no arquivo ini ● Chrome ○ Xdebug helper ○ Xdebug enabler ● Firefox ○ easy Xdebug ○ The easiest Xdebug ● Safari ○ Xdebug toogler
  • 37. Quero ver ao vivo! Talk is cheap. Show me the code. - Linus Torvalds #Show M eTheC ode
  • 39. Profiling Profiler integrado do Xdebug que permite encontrar gargalos no script e visualizá-los com uma ferramenta externa, como PHP Webgrind, MacAllGrind, kcachegrind ou WinCacheGrind.
  • 40. Profiling xdebug.ini xdebug.profiler_output_name = cachegrind.out.%u.%s.%R xdebug.profiler_enable = 1 ~$ apt-get install python graphviz ~$ git clone https://github.com/jokkedk/webgrind ~$ cd webgrind ~$ composer install ~$ php -S localhost:8000
  • 42. Profiling - webgrind - gráfico de chamadas
  • 44. O futuro Good bye PHP 5, go PHP7!!!!
  • 45. Falamos sobre: Sumário: ● O que é o xdebug? ● Porque usar o xdebug? ● Instalação ● Primeiros passos ○ Variáveis amigáveis ○ Xdebug na linha de comando ○ Removendo pogs ● Depurando em tempo real ● Code coverage ● Profiling
  • 48. Perguntas Redes sociais ( vitormattos )