Debugando PHP com PHPStorm

Andre Luis Gomes
Nov 3 · 6 min read

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

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
❯ 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 .

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.

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

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

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

  • 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

Debugging

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

❯ php hello.php

E voilà!!

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

Links e referências

Andre Luis Gomes

Written by

Lead Software Engineer, São Carlos, Brazil. Developer as job and hobby, blogger, podcaster on free times, stud

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade