2

Debugando PHP com PHPStorm

#PHP
André Gomes
André Gomes

Eu venho trabalhando com Java há muitos anos. E como todo bom javeiro, eu vivo em modo debug.

 

Image for post

Sério! Não sei falar quantos horas do dia meu Intellij passa em Debug.

Recentemente comecei a trabalhar em uma startup que tem como linguagem padrão PHP, e como todo mundo, chegou um momento que eu precisava depurar um problema e lembrando do começo da minha carreira em PHP lembrei do var_dump($var), que basicamente é invadir o código colocando uma função que irá mostrar no browser o resultado de uma variável. Lembrando muito o console.log() do Javascript. Mas no PHP, caso você deseje interromper a execução do código, usa-se o die() .

Variações como o dd($var) (dump and die no Symfony\Component\VarDumper) são executadas aos montes pelos programadores e confesso que fiquei meio surpreso vendo a galera debugar dessa forma. Justificável, pois o pessoal usa editores de texto on steroids para programar em PHP, como Sublime e VS Code.

Graças aos deuses da programação, existe o PHPStorm da JetBrains, uma IDE de desenvolvimento para PHP que eu já conhecia, mas não havia usado ainda, e a minha primeira ação foi baixar e instalar, antes mesmo do próprio PHP na máquina.

Inconformado com dd, dumps and dies , comecei minha jornada de como debugar meu projeto usando minha IDE.

História triste contada, vamos aos resultados:

XDebug

É uma extensão do PHP para debug e profile. Basicamente ele adiciona características e comportamentos ao PHP que está rodando.

Instalação

A instalação é bem simples e pode ser seguida no site oficial do XDebug usando PECL. Nesse exemplo, estou usando a seguinte versão do PHP e sistema operacional Ubuntu:

❯ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
❯ uname -a 
Linux DNL1VW2 4.15.0–66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
❯ php -v 
PHP 7.2.24–0ubuntu0.18.04.1 (cli) (built: Oct 28 2019 12:07:07) ( NTS ) Copyright © 1997–2018 The PHP Group
Zend Engine v3.2.0, Copyright © 1998–2018 Zend Technologies
 with Zend OPcache v7.2.24–0ubuntu0.18.04.1, Copyright © 1999–2018, by Zend Technologies

Algumas extensões do PHP devem ser preparadas usando a ferramenta phpize , devido à isso, vamos garantir ela exista no host antes de usar o pecl .

❯ where phpize
/usr/bin/phpize

Caso não exista, devemos instalar.

❯ sudo apt install php-dev

Agora podemos seguir com a instalação do XDebug.

❯ pecl install xdebug
Build process completed successfully
Installing ‘/usr/lib/php/20170718/xdebug.so’
install ok: channel://pecl.php.net/xdebug-2.8.0
configuration option “php_ini” is not set to php.ini location
You should add “zend_extension=/usr/lib/php/20170718/xdebug.so” to php.ini

Bem fácil. Agora, como o feedback da instalação sugere, devemos adicionar o xdebug no php.ini . Para isso, devemos abrir o arquivo em um editor de texto e adicionar a linha zend_extension=/usr/lib/php/20170718/xdebug.so . Além disso, iremos adicionar mais algumas configurações que irão permitir o debug remoto no PHPStorm.

Caso você não conheça a localização do php.ini , aqui vão algumas dicas:

❯ php -i | grep "Loaded Configuration File"
Loaded Configuration File => /etc/php/7.2/cli/php.ini❯ sudo find / -name php.ini 
/etc/php/7.2/cli/php.ini

Se você tiver problemas de permissão durante a edição do arquivo php.ini .

❯ sudo chown $USER /etc/php/7.2/cli/php.ini

A forma mais fácil de editar o arquivo é fazendo um simples append .

❯ echo "zend_extension=/usr/lib/php/20170718/xdebug.so" >> /etc/php/7.2/cli/php.ini
echo "xdebug.remote_enable=1" >> /etc/php/7.2/cli/php.ini
echo "xdebug.remote_autostart=1" >> /etc/php/7.2/cli/php.ini
echo "xdebug.remote_handler=dbgp" >> /etc/php/7.2/cli/php.ini
echo "xdebug.remote_port=9000" >> /etc/php/7.2/cli/php.ini
echo "xdebug.remote_connect_back=1" >> /etc/php/7.2/cli/php.ini
echo "xdebug.idekey=phpstorm" >> /etc/php/7.2/cli/php.ini

Cada uma das opções de configuração estão listadas e descritas na documentação oficial.

  • xdebug.remote_enable=1; para permitir a conexão de clientes do debug
  • xdebug.remote_autostart=1; para iniciar o debug independente de requisições GET/POST
  • xdebug.remote_handler=dbgp; protocolo de debug
  • xdebug.remote_port=9000; porta que o XDebug utiliza para conexão
  • xdebug.remote_connect_back=1; não se aplica a CLI, mas é importante para requisições HTTP
  • xdebug.idekey=phpstorm; identificador para acesso remoto da IDE

Agora podemos validar a configuração olhando o arquivo e o xdebug irá aparecer nas informações de versão do PHP.

❯ cat /etc/php/7.2/cli/php.ini

 

Image for post

❯ php -v 
PHP 7.2.24–0ubuntu0.18.04.1 (cli) (built: Oct 28 2019 12:07:07) ( NTS )
Copyright © 1997–2018 The PHP Group
Zend Engine v3.2.0, Copyright © 1998–2018 Zend Technologies
 with Xdebug v2.8.0, Copyright © 2002–2019, by Derick Rethans
 with Zend OPcache v7.2.24–0ubuntu0.18.04.1, Copyright © 1999–2018, by Zend Technologies

Configuração

Nosso trabalho agora será preparar a IDE para fazer o Debug. No meu caso estou usando a seguinte versão do PHPStorm:

PhpStorm 2019.2
Build #PS-192.5728.108, built on July 24, 2019

Primeiro vamos garantir que o PHPStorm esteja usando a mesma CLI que fizemos a configuração. Para isso vamos até Settings > Languages & Frameworks > PHP .

 

Image for post

Percebemos que é a mesma versão e o mesmo php.ini está sendo usado 👍

Agora em Settings > Languages & Frameworks > PHP > Debug, encontramos diversão orientações de configuração, mas o principal é garantir que o XDebug esteja na porta 9000.

 

Image for post

O próximo passo é deixar o proxy do DBGp na porta 9000 também em Settings > Languages & Frameworks > PHP > Debug > DBGp Proxy .

 

Image for post

Agora, vamos criar um Server para o Debug Remoto em Settings > Languages & Frameworks > PHP > Servers .

 

Image for post

Por último e mais importante é criar um PHP Remote Debug em Run/Debug Configurations .

 

Image for post

  • Name: pode ser um nome de sua preferência;
  • Server: devemos selecionar o server criado anteriormente;
  • IDE Key: devemos usar o que foi cadastrado nas configurações do php.ini ;

Agora basta rodar o Remote Debug clicando no… BUG! o.O

 

Image for post

 

Image for post

Debugging

Com o Remote Debug rodando, vamos executar o arquivo hello.php

❯ php hello.php

E voilà!!

 

Image for post

Perceba o breakpoint na linha 3 do script, agora é explorar as opções e a usabilidade do debug do PHPStorm :)

1
24

Comentários (1)

0
Ângelo Paranhos

Ângelo Paranhos

22/12/2020 20:16

Muito bom esse artigo

None