SlideShare uma empresa Scribd logo
xdebug
Seus problemas acabaram
Vitor Mattos
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
Desenvolvedor PHP desde 2003
Amante de opensource
Evangelista PHP
PHPRio ( http://telegram.me/phprio )
Contatos:
http://telegram.me/VitorMattos
Quem sou eu?
!=
Por uma vida mais saudável
O que é o xdebug?
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
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.0.8-0ubuntu0.16.04.2 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.8-0ubuntu0.16.04.2, Copyright (c) 1999-2016, by Zend Technologies
with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
Instalação - PECL
~$ sudo pecl install xdebug
Conferindo instalação
~$ php -v
PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.8-0ubuntu0.16.04.2, Copyright (c) 1999-2016, by Zend Technologies
with Xdebug v2.4.1, Copyright (c) 2002-2016, 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.0.8-0ubuntu0.16.04.2 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.8-0ubuntu0.16.04.2, Copyright (c) 1999-2016, by Zend Technologies
with Xdebug v2.5.0-dev, Copyright (c) 2002-2016, by Derick Rethans
Conferindo instalação
~$ cat /etc/php/7.0/mods-available/xdebug.ini
zend_extension=xdebug.so
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
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 isto...
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
Perguntas
vitor.mattos@phprio.org
linkedin.com/in/vitormattos
telegram.me/vitormattos

Mais conteúdo relacionado

PDF
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
PDF
Programando Software Livre em C
PDF
Xdebug seus problemas acabaram - tdc floripa 2017
PDF
BDD: Torne viva a documentação de seus sistemas
PDF
Novidades PHP 7.4 e 8.0!
PPTX
PHP 7 - A Maioridade do PHP
PPTX
PHPSP TestFest 2010
PDF
Escalando uma plataforma poliglota - QConSP 17
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
Programando Software Livre em C
Xdebug seus problemas acabaram - tdc floripa 2017
BDD: Torne viva a documentação de seus sistemas
Novidades PHP 7.4 e 8.0!
PHP 7 - A Maioridade do PHP
PHPSP TestFest 2010
Escalando uma plataforma poliglota - QConSP 17

Mais procurados (13)

PDF
Entendendo Conceitos Caching com PHP
PDF
Frameworks PHP
PDF
[ PHPFC V / DarkMiraTour ] - Controlando Php com arduino - Easy Way
PDF
Dia Debian 2007 - Desenvolvendo aplicações no Linux
PDF
Desenvolvendo com IONIC
PDF
Burlando Waf 2.0
PDF
Qualidade em projetos PHP - PHPSC Conf 2011
PDF
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
PDF
Por que jenkins se posso usar deployer php
PDF
PDF
Produtividade com ZF2, PDT & Zend Server Free Edition
PPTX
gRPC: Por que você ainda usa REST?
PDF
burlando um WAF
Entendendo Conceitos Caching com PHP
Frameworks PHP
[ PHPFC V / DarkMiraTour ] - Controlando Php com arduino - Easy Way
Dia Debian 2007 - Desenvolvendo aplicações no Linux
Desenvolvendo com IONIC
Burlando Waf 2.0
Qualidade em projetos PHP - PHPSC Conf 2011
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
Por que jenkins se posso usar deployer php
Produtividade com ZF2, PDT & Zend Server Free Edition
gRPC: Por que você ainda usa REST?
burlando um WAF
Anúncio

Destaque (20)

PPTX
TDC2016POA \ Trilha Analise Negocios - Agregando valor sem trauma: como trans...
PPTX
TDC2016POA | Trilha .NET - O que esperar do C# 7
PPTX
TDC2016POA | Trilha .NET - .NET Entity Core 1.0
PPTX
TDC2016POA | Trilha .NET - C# como você nunca viu: conceitos avançados de pro...
PPTX
Inspeção e Adaptação no Scrum com Indicadores de Resultado e Direção | TDC PO...
PPTX
TDC2016POA | Trilha .NET - CQRS e ES na prática com RavenDB
PPTX
TDC 2016 |Trilha DevOps - Dissecando e entendendo pipelines de entrega de sof...
PPTX
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
PDF
TDC2016 POA | Trilha DevOps - Blue-Green Deployment com Docker
PDF
Carthage ou cocoapods
PDF
A Importância do Teste Continuo
PPT
Palestra "Ionic Framework 2 - O que vem por aí?" TDC 2016
PDF
O que Evitar na Escrita de Criterios de Aceite
PDF
Análise de dados com R - TDC 2015
PPT
TDC2016POA | Trilha Education - Robótica Livre nas escolas públicas do RS: a ...
PDF
TDC2016POA | Trilha Education - Aprendizagem baseada em projetos: Uma experi...
PPTX
TDC2016POA | Trilha Empreendedorismo - Empreendendo da ideia ao desinvestimento
PDF
TDC2016POA | Trilha Empreendedorismo - Manual Prático do Empreendedorismo
PPT
TDC2016POA | Trilha Education - Jogos na Educação, onde estamos errando?
PDF
TDC2016POA | Trilha Education - Design Thinking na Educação: Como aplicar no...
TDC2016POA \ Trilha Analise Negocios - Agregando valor sem trauma: como trans...
TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - .NET Entity Core 1.0
TDC2016POA | Trilha .NET - C# como você nunca viu: conceitos avançados de pro...
Inspeção e Adaptação no Scrum com Indicadores de Resultado e Direção | TDC PO...
TDC2016POA | Trilha .NET - CQRS e ES na prática com RavenDB
TDC 2016 |Trilha DevOps - Dissecando e entendendo pipelines de entrega de sof...
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
TDC2016 POA | Trilha DevOps - Blue-Green Deployment com Docker
Carthage ou cocoapods
A Importância do Teste Continuo
Palestra "Ionic Framework 2 - O que vem por aí?" TDC 2016
O que Evitar na Escrita de Criterios de Aceite
Análise de dados com R - TDC 2015
TDC2016POA | Trilha Education - Robótica Livre nas escolas públicas do RS: a ...
TDC2016POA | Trilha Education - Aprendizagem baseada em projetos: Uma experi...
TDC2016POA | Trilha Empreendedorismo - Empreendendo da ideia ao desinvestimento
TDC2016POA | Trilha Empreendedorismo - Manual Prático do Empreendedorismo
TDC2016POA | Trilha Education - Jogos na Educação, onde estamos errando?
TDC2016POA | Trilha Education - Design Thinking na Educação: Como aplicar no...
Anúncio

Semelhante a TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram! (20)

PDF
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
PDF
Aplicações Profissionais para Internet com Zend Framework
PDF
Construção e provisionamento de ambientes de desenvolvimento virtualizados
PDF
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
PDF
Programação Multiplataforma em Ambiente Web
PDF
Oficina de PHP - Software Freedom Day Luziânia 2013
PDF
Depurando código PHP com Docker e Xdebug - PHPRS
PDF
1001 maneiras de debugar o WordPress
PDF
PHP-CLI em 7 passos
PPTX
Ecossistema PHP - O presente, o passado e o futuro da linguagem back-end mais...
PDF
Depurando aplicações PHP like a BOSS
PDF
PHP para aplicações Web de grande porte
ODP
Depurando Aplicacoes PHP
PDF
Pense no futuro: PHP com Zend Framework
PDF
PHP: Além do sitezinho
PDF
PHP e componentes reutilizáveis
ODP
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
PPTX
O ecossistema e o estado atual do php - o presente, o passado e o futuro da ...
PDF
Introducao ao PHP @edgarsandi
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
Aplicações Profissionais para Internet com Zend Framework
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Programação Multiplataforma em Ambiente Web
Oficina de PHP - Software Freedom Day Luziânia 2013
Depurando código PHP com Docker e Xdebug - PHPRS
1001 maneiras de debugar o WordPress
PHP-CLI em 7 passos
Ecossistema PHP - O presente, o passado e o futuro da linguagem back-end mais...
Depurando aplicações PHP like a BOSS
PHP para aplicações Web de grande porte
Depurando Aplicacoes PHP
Pense no futuro: PHP com Zend Framework
PHP: Além do sitezinho
PHP e componentes reutilizáveis
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
O ecossistema e o estado atual do php - o presente, o passado e o futuro da ...
Introducao ao PHP @edgarsandi

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
INDÚSTRIA_ Histórico da industrialização.pptx
PPT
História e Evolução dos Computadores domésticos
PDF
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
PPTX
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
PDF
A Revolução Francesa de 1789 slides história
PPTX
Slides Lição 7, CPAD, Uma Igreja Que Não Teme A Perseguição, 3Tr25.pptx
PPTX
Filosofia Ocidental Antiga 2025 - versão atualizada
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PPTX
O Romantismo e a identidade brasileira..
PDF
COMO OS CONTOS DE FADAS REFLETEM ARQUÉTIPOS_MEDOS E DESEJOS DO INCONSCIENTE H...
PDF
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
PDF
Ementa 2 semestre PEI Orientação de estudo
PPTX
A História da Europa na Baixa Idade Média.pptx
PPTX
biossegurança e segurança no trabalho (6).pptx
PDF
embriologia_animal_aula_share_2026_semestre
PPTX
Lição 8 EBD.pptxtudopossonaquelequemimfortalece
PPTX
MENDEL - Aula sobre Mendel - Genética EM
PPTX
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
PDF
Uma Introdução às Ciências do Alcorão (Islam)
PPTX
NR11 - Treinamento Direcao Defensiva - 2023.pptx
INDÚSTRIA_ Histórico da industrialização.pptx
História e Evolução dos Computadores domésticos
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
A Revolução Francesa de 1789 slides história
Slides Lição 7, CPAD, Uma Igreja Que Não Teme A Perseguição, 3Tr25.pptx
Filosofia Ocidental Antiga 2025 - versão atualizada
Aula 13 - Tópico Frasal - Argumentação.pptx
O Romantismo e a identidade brasileira..
COMO OS CONTOS DE FADAS REFLETEM ARQUÉTIPOS_MEDOS E DESEJOS DO INCONSCIENTE H...
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
Ementa 2 semestre PEI Orientação de estudo
A História da Europa na Baixa Idade Média.pptx
biossegurança e segurança no trabalho (6).pptx
embriologia_animal_aula_share_2026_semestre
Lição 8 EBD.pptxtudopossonaquelequemimfortalece
MENDEL - Aula sobre Mendel - Genética EM
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
Uma Introdução às Ciências do Alcorão (Islam)
NR11 - Treinamento Direcao Defensiva - 2023.pptx

TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!

  • 2. 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
  • 3. Desenvolvedor PHP desde 2003 Amante de opensource Evangelista PHP PHPRio ( http://telegram.me/phprio ) Contatos: http://telegram.me/VitorMattos Quem sou eu?
  • 4. != Por uma vida mais saudável O que é o xdebug?
  • 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
  • 7. 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();
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. Conferindo instalação ~$ php -v PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.8-0ubuntu0.16.04.2, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
  • 12. Instalação - PECL ~$ sudo pecl install xdebug
  • 13. Conferindo instalação ~$ php -v PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.8-0ubuntu0.16.04.2, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.4.1, Copyright (c) 2002-2016, by Derick Rethans
  • 14. 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
  • 15. Conferindo instalação ~$ php -v PHP 7.0.8-0ubuntu0.16.04.2 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.8-0ubuntu0.16.04.2, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.5.0-dev, Copyright (c) 2002-2016, by Derick Rethans
  • 16. Conferindo instalação ~$ cat /etc/php/7.0/mods-available/xdebug.ini zend_extension=xdebug.so 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
  • 17. 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
  • 18. Variáveis amigáveis - browser O xdebug faz isto...
  • 20. Variáveis amigáveis - browser Virar isto!
  • 21. Variáveis amigáveis - browser E ainda pode melhorar!
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 33. 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!
  • 34. Ações ao debugar Set breakpoint Step into Step opver Step return Run to cursor Resume Terminate
  • 35. 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
  • 36. Quero ver ao vivo! Talk is cheap. Show me the code. - Linus Torvalds #Show M eTheC ode
  • 38. 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.
  • 39. 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
  • 41. Profiling - webgrind - gráfico de chamadas