Xdebug

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

O 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 xdebug

O 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 install

O 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 xdebug

Conferindo instalação

php -v

No 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 Rethans

E 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=1

php.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=1

php.ini

Evitando falhas de recursividade

xdebug.max_nesting_level=3

php.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:3

Clientes

Xdebug no VSCodium

VSCodium?

Xdebug no VSCodium

Xdebug no VSCodium

xdebug.remote_enable = 1
xdebug.remote_autostart=on

php.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 xdebug

Xdebug 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

xdebug

By Vitor Mattos

xdebug

  • 946