SlideShare a Scribd company logo
1 of 48
Download to read offline
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/
Perguntas
Redes sociais ( vitormattos )

More Related Content

What's hot

Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
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
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Maellson Marques
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Felipe Queiroz
 
Contribuindo e criando software livre
Contribuindo e criando software livreContribuindo e criando software livre
Contribuindo e criando software livreVitor Mattos
 
Vagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVinícius Krolow
 

What's hot (19)

Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
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
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
 
Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
PHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHPPHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHP
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Aula2
Aula2Aula2
Aula2
 
Canivete python
Canivete pythonCanivete python
Canivete python
 
Curso de Groovy
Curso de GroovyCurso de Groovy
Curso de Groovy
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
 
Python para Programadores
Python para ProgramadoresPython para Programadores
Python para Programadores
 
Python 3k
Python 3kPython 3k
Python 3k
 
Contribuindo e criando software livre
Contribuindo e criando software livreContribuindo e criando software livre
Contribuindo e criando software livre
 
Vagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizado
 

Similar to Xdebug seus problemas acabaram - tdc floripa 2017

Construção e provisionamento de ambientes de desenvolvimento virtualizados
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
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSThiago Rodrigues
 
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
Seguindo padrões: Codificando profissionalmente com PHP SnifferSeguindo padrões: Codificando profissionalmente com PHP Sniffer
Seguindo padrões: Codificando profissionalmente com PHP SnifferVinicius Warto Campos
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPressRudá Almeida
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressTiago Hillebrandt
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHPLuiz Messias
 
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
 
Laravel + Vue: Como começar
Laravel + Vue: Como começarLaravel + Vue: Como começar
Laravel + Vue: Como começarLeandro Ferreira
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPRodrigo Dos Santos
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJSGiovanni Bassi
 
Praticas DevOps Com ZendServer
Praticas DevOps Com ZendServerPraticas DevOps Com ZendServer
Praticas DevOps Com ZendServerWilliam Felipe
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2Cezar Souza
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigitalJust Digital
 
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
 
Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php Michael Douglas
 
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
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvPedro Fernandes Vieira
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingRhuan Karlus Silva
 
Depurando código PHP com Docker e Xdebug - PHPRS
Depurando código PHP com Docker e Xdebug - PHPRSDepurando código PHP com Docker e Xdebug - PHPRS
Depurando código PHP com Docker e Xdebug - PHPRSEduardo Pittol
 

Similar to Xdebug seus problemas acabaram - tdc floripa 2017 (20)

Construção e provisionamento de ambientes de desenvolvimento virtualizados
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 virtualizados
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSS
 
Depurando Aplicacoes PHP
Depurando Aplicacoes PHPDepurando Aplicacoes PHP
Depurando Aplicacoes PHP
 
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
Seguindo padrões: Codificando profissionalmente com PHP SnifferSeguindo padrões: Codificando profissionalmente com PHP Sniffer
Seguindo padrões: Codificando profissionalmente com PHP Sniffer
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
 
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
 
Laravel + Vue: Como começar
Laravel + Vue: Como começarLaravel + Vue: Como começar
Laravel + Vue: Como começar
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJS
 
Praticas DevOps Com ZendServer
Praticas DevOps Com ZendServerPraticas DevOps Com ZendServer
Praticas DevOps Com ZendServer
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
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
 
Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php
 
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
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenv
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and Multithreading
 
Depurando código PHP com Docker e Xdebug - PHPRS
Depurando código PHP com Docker e Xdebug - PHPRSDepurando código PHP com Docker e Xdebug - PHPRS
Depurando código PHP com Docker e Xdebug - PHPRS
 

More from Vitor Mattos

Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017Vitor Mattos
 
Composer dependency manager
Composer   dependency managerComposer   dependency manager
Composer dependency managerVitor Mattos
 
Que oportunidades me encontrem!
Que oportunidades me encontrem!Que oportunidades me encontrem!
Que oportunidades me encontrem!Vitor Mattos
 
Seja subversivo, faça testes
Seja subversivo, faça testesSeja subversivo, faça testes
Seja subversivo, faça testesVitor Mattos
 
Apresentação feedback cool
Apresentação feedback coolApresentação feedback cool
Apresentação feedback coolVitor Mattos
 
Melhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpMelhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpVitor Mattos
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Vitor Mattos
 

More from Vitor Mattos (9)

Composer dependency manager - TDC - POA 2017
Composer   dependency manager - TDC - POA 2017Composer   dependency manager - TDC - POA 2017
Composer dependency manager - TDC - POA 2017
 
Composer dependency manager
Composer   dependency managerComposer   dependency manager
Composer dependency manager
 
Que oportunidades me encontrem!
Que oportunidades me encontrem!Que oportunidades me encontrem!
Que oportunidades me encontrem!
 
Seja subversivo, faça testes
Seja subversivo, faça testesSeja subversivo, faça testes
Seja subversivo, faça testes
 
Apresentação feedback cool
Apresentação feedback coolApresentação feedback cool
Apresentação feedback cool
 
Melhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + phpMelhor que whatsapp: telegram + php
Melhor que whatsapp: telegram + php
 
PHP em Background
PHP em BackgroundPHP em Background
PHP em Background
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!
 
JasperReports
JasperReportsJasperReports
JasperReports
 

Xdebug seus problemas acabaram - tdc floripa 2017

  • 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
  • 47.
  • 48. Perguntas Redes sociais ( vitormattos )