Vitor Mattos
seus problemas acabaram!





Quem sou eu?
Realizador de sonhos desde 2003
Amante de opensource
Palestrante
PHP Zend Certified Engineer ( ZEND024235 )
PHPRio ( https://telegram.me/phprio )
CTO Lyseon Tech
Redes sociais: ( VitorMattos ou VitorMattosRJ )
A Lyseon Tech é uma cooperativa de trabalho com modelo de gestão democrática, segura e eficiente composta por profissionais de T.I. altamente qualificados e experientes no mercado. Prezamos por apresentar vantagens, tanto para o cooperado como para as empresas parceiras.

Falaremos sobre
- 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.

O que é o xdebug?
- 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, 'arquivo-de.log'
);
exit();
die();
return;
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 cliente 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
Na janela
Dá maior volta e não cabe em um slide,
segue o wizard que tem no site:
Instalação
Repositório da distro
Funciona em qualquer ambiente que execute PHP, em distribuições Linux baseadas em Debian, faça da seguinte forma:
sudo apt-get install php-xdebugO manual completo da extensão você encontra em:
xdebug.org
Instalação
PECL
Pode instalar via PECL: repositório de extensões do PHP
sudo pecl install xdebugO manual completo da extensão você encontra em:
xdebug.org
Instalação
Source do Xdebug
Pode instalar via PECL: repositório de extensões do PHP
sudo apt-get install php phpize git
git clone git://github.com/xdebug/xdebug.git
cd xdebug/
phpize
./configure --enable-xdebug
make
sudo make installO manual completo da extensão você encontra em:
xdebug.org
Instalação
Docker
docker-compose.yml
php7:
build: .docker/php7
environment:
XDEBUG_CONFIG: "remote_host=172.17.0.1 remote_enable=1"Dockerfile
# Install xdebug
RUN pecl install xdebug-2.9.1 \
&& docker-php-ext-enable xdebugConferindo instalação
php -vNo terminal digite:
PHP 7.4.5 (cli) (built: Apr 17 2020 11:29:12) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Xdebug v2.9.4, Copyright (c) 2002-2020, by Derick RethansE verá isto:
Conferindo instalação

<?php
phpinfo();Variáveis amigáveis
Se quando dá erro na aplicação fica uma grande tela branca...
Variáveis amigáveis
Habilitando exibição de erros:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);OBS: ainda não estamos usando Xdebug aqui
Variáveis amigáveis
O Xdebug faz um monte de texto ilegível...

Variáveis amigáveis

Variáveis amigáveis
Ficar assim...

Variáveis amigáveis
No CLI - Command Line Interface

<?php
ini_set('xdebug.cli_color', 1);
var_dump([
'Pera',
'Uva',
'Maçã'
]);POG do desespero
É possível ocultar alguns erros no PHP com o @
Porém, é possível exibir novamente com o xdebug

xdebug.scream=1php.ini
POG do desespero
Se a aplicação por padrão não exibe erros, você pode fazer eles aparecerem.

xdebug.force_error_reporting=E_ALL
xdebug.force_display_errors=1php.ini
Evitando falhas de recursividade
xdebug.max_nesting_level=3php.ini
PHP Fatal error: Maximum function nesting level of '3' reached, aborting! in /app/recursive.php on line 2
PHP Stack trace:
PHP 1. {main}() /app/recursive.php:0
PHP 2. a() /app/recursive.php:5
PHP 3. a() /app/recursive.php:3Clientes
- Eclipse plugin (IDE).
- JetBrain's PhpStorm (IDE; Commercial).
- Visual Studio Code (IDE; Open Source).
- SublimeTextXdebug (Plugin for Sublime Text 2 and 3, Open Source).
- NetBeans (IDE: Windows, Linux, Mac OS X and Solaris).
- VIM plugin (Editor Plugin).
- Notepad++ plugin (Editor: Windows).
- ...
Xdebug no VSCodium
VSCodium?


Xdebug no VSCodium

Xdebug no VSCodium
xdebug.remote_enable = 1
xdebug.remote_autostart=onphp.ini
docker-compose.yml
php7:
build: .docker/php7
environment:
XDEBUG_CONFIG: "remote_host=172.17.0.1 remote_enable=1"Dockerfile
# Install xdebug
RUN pecl install xdebug-2.9.1 \
&& docker-php-ext-enable xdebugXdebug com Docker no VSCodium
Xdebug com Docker no VSCodium

Instale a extensão PHP Debug
Xdebug com Docker no VSCodium
Clique no botão para debugar

Xdebug com Docker no VSCodium
Clique aqui

Xdebug com Docker no VSCodium
Clique aqui

Xdebug com Docker no VSCodium
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"pathMappings": {
"/app": "${workspaceFolder}"
}
},Tem autocomplete
A IDE precisa saber que o arquivo /app/index.php (exemplo) no servidor é encontrado na raiz da aplicação.
Ações ao debugar
- Set breakpoint
- Step into
- Step opver
- Step return
- Run to cursor
- Resume
- Terminate
Habilitando o debug no browser
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.
- Chrome
- Xdebug helper
- Xdebug enabler
- Firefox
- easy Xdebug
- The easiest Xdebug
- Safari
- Xdebug toogler
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

Profiling

Referências
Quero ver ao vivo!
Talk is cheap.
Show me the code.
- Linus Torvalds
#ShowMeTheCode
Vitor Mattos

vitor@LT.coop.br
t.me/VitorMattos



