48
Seus problemas acabaram By: Vitor Mattos

Xdebug seus problemas acabaram - tdc floripa 2017

Embed Size (px)

Citation preview

Page 1: Xdebug   seus problemas acabaram - tdc floripa 2017

Seus problemas acabaramBy: Vitor Mattos

Page 2: Xdebug   seus problemas acabaram - tdc floripa 2017

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?

Page 3: Xdebug   seus problemas acabaram - tdc floripa 2017

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 FeitozaEvangelista PHP

Page 4: Xdebug   seus problemas acabaram - tdc floripa 2017

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

Page 5: Xdebug   seus problemas acabaram - tdc floripa 2017

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

Page 6: Xdebug   seus problemas acabaram - tdc floripa 2017

!=Por uma vida mais saudável

O que é o xdebug?

Page 7: Xdebug   seus problemas acabaram - tdc floripa 2017

Porque usar xdebug?Debugando sem xdebug

Page 8: Xdebug   seus problemas acabaram - tdc floripa 2017

Porque usar xdebug?Debugando sem xdebug

<?phpecho $variavel;echo '<pre>';var_dump($um_array);echo '</pre>';print_r($mais_uma);error_log('passei aqui', 3, '/var/log/app/meu.log');exit();

Page 9: Xdebug   seus problemas acabaram - tdc floripa 2017

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

Page 10: Xdebug   seus problemas acabaram - tdc floripa 2017

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

Page 11: Xdebug   seus problemas acabaram - tdc floripa 2017

Instalação - repositórioFunciona 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

Page 12: Xdebug   seus problemas acabaram - tdc floripa 2017

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 GroupZend 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

Page 13: Xdebug   seus problemas acabaram - tdc floripa 2017

Instalação - PECL~$ sudo pecl install xdebug

Page 14: Xdebug   seus problemas acabaram - tdc floripa 2017

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 GroupZend 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

Page 15: Xdebug   seus problemas acabaram - tdc floripa 2017

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

Page 16: Xdebug   seus problemas acabaram - tdc floripa 2017

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 GroupZend 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

Page 17: Xdebug   seus problemas acabaram - tdc floripa 2017

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

Page 18: Xdebug   seus problemas acabaram - tdc floripa 2017

Arquivo de configuração - xdebug.inizend_extension=xdebug.so

[xdebug]xdebug.default_enable=onxdebug.remote_enable=onxdebug.remote_autostart=onxdebug.profiler_output_name = cachegrind.out.%u.%s.%Rxdebug.profiler_enable = 0xdebug.remote_port=9000xdebug.remote_handler=dbgpxdebug.remote_mode=reqxdebug.remote_host=127.0.0.1xdebug.remote_log=/tmp/xdebug.log;xdebug.remote_host=remote.mypage.comxdebug.scream=0xdebug.cli_color=Onxdebug.var_display_max_depth=10xdebug.var_display_max_children=200xdebug.overload_var_dump = 1xdebug.show_exception_trace = Offxdebug.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

Page 19: Xdebug   seus problemas acabaram - tdc floripa 2017

Variáveis amigáveis - browserO xdebug faz um monte de texto ilegível...

Page 20: Xdebug   seus problemas acabaram - tdc floripa 2017

Variáveis amigáveis - browser

Page 21: Xdebug   seus problemas acabaram - tdc floripa 2017

Variáveis amigáveis - browserVirar isto!

Page 22: Xdebug   seus problemas acabaram - tdc floripa 2017

Variáveis amigáveis - browserE ainda pode melhorar!

Page 23: Xdebug   seus problemas acabaram - tdc floripa 2017

Variáveis amigáveis - browserxdebug.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

Page 24: Xdebug   seus problemas acabaram - tdc floripa 2017

Variáveis amigáveis - clizend_extension=xdebug.so

[xdebug]xdebug.default_enable=onxdebug.cli_color=Onxdebug.var_display_max_depth=10xdebug.var_display_max_children=200xdebug.overload_var_dump=1

Page 25: Xdebug   seus problemas acabaram - tdc floripa 2017

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_tracehttp://php.net/manual/language.operators.errorcontrol.php

Page 26: Xdebug   seus problemas acabaram - tdc floripa 2017

Evitando falhas de recursividadexdebug.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 2PHP Stack trace:PHP 1. {main}() /home/vitor/projetos/palestra-xdebug/recursive.php:0PHP 2. a() /home/vitor/projetos/palestra-xdebug/recursive.php:5PHP 3. a() /home/vitor/projetos/palestra-xdebug/recursive.php:3

Page 27: Xdebug   seus problemas acabaram - tdc floripa 2017

Debugando ao vivoDBGp - 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

Page 28: Xdebug   seus problemas acabaram - tdc floripa 2017

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

Page 29: Xdebug   seus problemas acabaram - tdc floripa 2017

Xdebug no Eclipse

Page 30: Xdebug   seus problemas acabaram - tdc floripa 2017

Xdebug no Eclipse

1

Page 31: Xdebug   seus problemas acabaram - tdc floripa 2017

Xdebug no Eclipse

2

13

4

Page 32: Xdebug   seus problemas acabaram - tdc floripa 2017

Xdebug no Eclipse

3

2

1

Page 33: Xdebug   seus problemas acabaram - tdc floripa 2017

Xdebug no Eclipse

1

2

3

4

5

Page 34: Xdebug   seus problemas acabaram - tdc floripa 2017

Arquivo de configuração - xdebug.ini

zend_extension=xdebug.so

[xdebug]xdebug.default_enable=onxdebug.remote_autostart=on

OBS: TDD + PHPUnit também é importante!

Page 35: Xdebug   seus problemas acabaram - tdc floripa 2017

Ações ao debugarSet breakpoint

Step into

Step opver

Step return

Run to cursor

Resume

Terminate

Page 36: Xdebug   seus problemas acabaram - tdc floripa 2017

Habilitando e desabilitandoAlgumas 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

Page 37: Xdebug   seus problemas acabaram - tdc floripa 2017

Quero ver ao vivo!

Talk is cheap.

Show me the code.- Linus Torvalds

#ShowMeTheCode

Page 38: Xdebug   seus problemas acabaram - tdc floripa 2017

Coverage./vendor/bin/phpunit --coverage-html coverage

Page 39: Xdebug   seus problemas acabaram - tdc floripa 2017

ProfilingProfiler integrado do Xdebug que permite encontrar gargalos no script e visualizá-los com uma ferramenta externa, como PHP Webgrind, MacAllGrind, kcachegrind ou WinCacheGrind.

Page 40: Xdebug   seus problemas acabaram - tdc floripa 2017

Profilingxdebug.inixdebug.profiler_output_name = cachegrind.out.%u.%s.%Rxdebug.profiler_enable = 1

~$ apt-get install python graphviz~$ git clone https://github.com/jokkedk/webgrind

~$ cd webgrind

~$ composer install

~$ php -S localhost:8000

Page 41: Xdebug   seus problemas acabaram - tdc floripa 2017

Profiling - webgrind

Page 42: Xdebug   seus problemas acabaram - tdc floripa 2017

Profiling - webgrind - gráfico de chamadas

Page 43: Xdebug   seus problemas acabaram - tdc floripa 2017

Profiling - kcachegrind

Page 44: Xdebug   seus problemas acabaram - tdc floripa 2017

O futuroGood bye PHP 5, go PHP7!!!!

Page 45: Xdebug   seus problemas acabaram - tdc floripa 2017

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

Page 47: Xdebug   seus problemas acabaram - tdc floripa 2017
Page 48: Xdebug   seus problemas acabaram - tdc floripa 2017

PerguntasRedes sociais ( vitormattos )