📝Aula + Checklist: Criando seu Mini Aplicativo com IA 💻

Guia Prático e Confiável Sobre Debugging com var_dump() e Xdebug no PHP

Leia o artigo e entenda como utilizar as ferramentas de depuração var_dump() e Xdebug no PHP para identificar e corrigir erros no seu código.
Publicado em 11/09/2024

Atualizado em 02/06/2025
Guia Prático Sobre Debugging com var_dump() e Xdebug no PHP

Depurar código é uma parte essencial do desenvolvimento de software, especialmente em linguagens dinâmicas como PHP. Entre as ferramentas mais comuns para esse propósito estão o var_dump() e o Xdebug, que ajudam pessoas desenvolvedoras a entender o comportamento do código e a identificar onde os problemas estão ocorrendo.

No PHP, o var_dump() é amplamente utilizado por sua simplicidade e eficácia, enquanto o Xdebug oferece recursos avançados para uma análise mais profunda. Quer saber mais sobre estes recursos? Continue a leitura deste artigo e confira:

  • o que é debug e por que ele é importante;
  • como usar o var_dump() no PHP;
  • como utilizar o Xdebug para depuração avançada no PHP.

O que é debug e por que ele é importante?

No contexto do PHP, onde o código é interpretado em tempo real, podem surgir erros que não são detectados até o momento da execução. É aqui que o debug se torna essencial, permitindo que os desenvolvedores inspecionem o código, entendam o fluxo de execução e corrijam quaisquer problemas encontrados.

Sendo assim, ferramentas de debug ajudam a monitorar partes específicas do código, permitindo que a pessoa desenvolvedora identifique a causa raiz de um problema. Para isso, é preciso ativar o display_errors no php.ini e deixar como padrão “mostrar todos os erros”. Caso contrário, a tela aparecerá em branco em exceções geradas pela aplicação e não será possível ver o erro na tela.

Na KingHost, para ativar essas configurações para sua aplicação, basta seguir o passo a passo:

  1. acessar o Painel de Controle;
  2. selecionar o seu Domínio;
  3. configuração PHP;
  4. ativar display_errors.

Quanto ao reporte de erros, adicione o código error_reporting(E_ALL); no arquivo global de sua aplicação. Vamos considerar como exemplo o pequeno trecho de código abaixo:

<?php

class Cachorro {

    private $raca;

    private $nome;

    public function __construct()

    {

    $this->raca = ‘Poodle’;

    $this->nome = ‘Bob’;

    }

    public function setRaca($raca)

    {

    $this->raca = $raca;

    }

    public function setNome($nome)

    {

    $this->nome == $nome;

    }

    public function getInformacoes()

    {

    return “Meu cachorro é da raça {$this->raca} e o nome dele é {$this->nome}”;

    }

}

$cachorro = new Cachorro();

$cachorro->setRaca(‘Dogue Alemão’);

$cachorro->setNome(‘Scooby’);

echo $cachorro->getInformacoes();

O exemplo consiste em uma classe simples chamada Cachorro, que tem as funções de setar o nome (setNome) e a raça (setRaca).

Há também uma função para disponibilizar as informações do cachorro na tela (getInformacoes) e, caso não sejam setadas a raça ou o nome do cachorro, ele tem um construtor para definir os valores padrão “Poodle” para raça e “Bob” para o nome.

Ao acessar o nosso código no navegador ou por um terminal veremos que o retorno é: “Meu cachorro é da raça Dogue Alemão e o nome dele é Bob”. Colocamos o nome Scooby com a função setNome, lembra-se? Então, vamos aplicar o debug nesta aplicação.

Sempre temos que pensar em fazer a engenharia reversa, ou seja, quem está aparecendo errado? O nome! Então vamos primeiro ver qual é a função que me retorna as informações do cachorro:

 public function getInformacoes()

    {

    return “Meu cachorro é da raça {$this->raca} e o nome dele é {$this->nome}”;

    }

Temos que entender primeiramente o que esta função básica faz: retorna uma string e, dentro dela, imprime os valores da raça e do nome deste objeto que está instanciado.

Como usar o var_dump() no PHP?

O var_dump() é uma função nativa do PHP que exibe informações detalhadas sobre uma variável, incluindo seu tipo e valor. Por exemplo, ao aplicar var_dump($variavel);, o PHP retorna detalhes como o tipo da variável (inteiro, string, array, etc.) e seu conteúdo.

Essa função é especialmente útil para visualizar o estado das variáveis em diferentes pontos do código, o que ajuda a identificar onde algo pode estar dando errado.

Retomando o nosso exemplo, se o nome está sendo impresso de forma errada, vamos matar a aplicação, antes de retornar a string completo e pedir para mostrar somente o valor do nome:

public function getInformacoes()

    {

    var_dump($this->nome);exit;

    return “Meu cachorro é da raça {$this->raca} e o nome dele é {$this->nome}”;

    }

A função var_dump, se traduzirmos livremente, “despejar variável”, faz exatamente isso: nos mostra todas as informações salvas dentro desta variável. Já a função exit, mata o script e não deixa mais nada ser executado. Então, se acessarmos a aplicação novamente, teremos o resultado impresso:

string(3) “Bob”

Se o nome está sendo impresso corretamente e não está sendo alterado antes de retornar à string, então temos que analisar onde está sendo setado este nome. Para isso, apague o var_dump e exit da função getInformacoes() e vamos analisar a função setNome():

    public function setNome($nome)

    {

    $this->nome == $nome;

    }

Primeiramente vamos verificar se estamos recebendo o parâmetro correto:

public function setNome($nome)

    {

    var_dump($nome);exit;

    $this->nome == $nome;

    }

O resultado da aplicação:

string(6) “Scooby”

Estamos recebendo corretamente o valor do parâmetro, então, conseguimos ver que o erro está no momento em que atribuímos este valor à propriedade nome do objeto:

public function setNome($nome)

    {

    $this->nome == $nome;

    }

Encontramos o erro! Nesta função, estamos utilizando o símbolo de comparação (==), comparando a propriedade nome do objeto instanciado, cujo valor padrão é ‘Bob’, com o que estamos recebendo por parâmetro. Para solucionar, basta arrumarmos isto na função:

  public function setNome($nome)

    {

    $this->nome = $nome;

    }

E, ao acessarmos, teremos o resultado esperado:

“Meu cachorro é da raça Dogue Alemão e o nome dele é Scooby”

Este caso é simples, mas a técnica de var_dump + exit pode ser utilizada para investigar qualquer tipo de aplicação.

Vamos para outro caso:

class Cachorro {

    private $raca;

    private $nome;

    public function __construct()

    {

    $this->raca = ‘Poodle’;

    $this->nome = ‘Bob’;

    }

    public function setRaca($raca)

    {

    $this->raca = $raca;

    }

    public function setNome($nome)

    {

    $this->nome = $nome;

    }

    public function getInformacoes()

    {

    return “Meu cachorro é da raça {$this->raca} e o nome dele é {$this->nome}”;

    }

}

$cachorro = new Cachorro();

$cachorro->setRaca(‘Dogue Alemão’);

$cachorro->setName(‘Scooby’);

echo $cachorro->getInformacoes();

Ao acessarmos este script:

Uncaught Error: Call to undefined method Cachorro::setName()

Podemos continuar utilizando a função ‘echo’ para imprimir uma mensagem de qual passo da aplicação estamos e ir matando ela até encontrar onde está o erro. Por exemplo:

$cachorro = new Cachorro();

echo ‘Instanciei um objeto cachorro’;exit;

$cachorro->setRaca(‘Dogue Alemão’);

$cachorro->setName(‘Scooby’);

echo $cachorro->getInformacoes();

Ao acessarmos a aplicação, veremos que a mensagem “Instanciei um objeto cachorro” é mostrada, indicando que não é um erro na hora de instanciar o objeto. Continuando:

$cachorro = new Cachorro();

$cachorro->setRaca(‘Dogue Alemão’);

die(‘Informei a raca do meu cachorro’);

$cachorro->setName(‘Scooby’);

echo $cachorro->getInformacoes();

A função die, matar em inglês, é a junção da função echo com exit. Basta passar como parâmetro a mensagem que queremos disponibilizar, a mensagem é mostrada e o script morto. Ao acessarmos a aplicação, veremos a mensagem “Informei a raça do meu cachorro”. Mais uma vez:

$cachorro = new Cachorro();

$cachorro->setRaca(‘Dogue Alemão’);

$cachorro->setName(‘Scooby’);

die(‘setei o nome do cachorro’);

echo $cachorro->getInformacoes();

Neste momento, se acessarmos a aplicação, veremos novamente:

Call to undefined method Cachorro::setName()

Então, conseguimos identificar que o erro está no nome da função. Como diz o erro, “Call to undefined method Cachorro::setName()”, Chamada para um método não definido Cachorro::setName(), pois o nome da função na verdade é setNome().

Alterando o nome da função, a aplicação volta a funcionar normalmente, e o mesmo procedimento pode ser utilizado para depurar aplicações que utilizam algum framework MVC, algum CMS como WordPress ou Magento.

Apenas com essas 4 funções ‘echo’, ‘var_dump’, ‘exit’, ‘die’, conseguimos entender o erro em qualquer aplicação PHP.

Como utilizar o Xdebug para depuração avançada no PHP?

Embora o var_dump() seja uma ferramenta poderosa para depurações rápidas, ele tem suas limitações, especialmente em projetos maiores e mais complexos. O Xdebug é uma extensão do PHP que oferece funcionalidades avançadas, como:

  • rastreamento de pilha;
  • profiling;
  • capacidade de interromper a execução do código em pontos específicos para inspecionar variáveis.

Seguindo nosso exemplo, caso precisemos ver os dados da variável $cachorro como ele é instanciado e depois utilizar o var_dump para ver os dados do cachorro após setar um nome, eu faço dessa maneira no código:

PHP

$cachorro = new Cachorro();

var_dump($cachorro);

$cachorro->setNome(‘Scooby’);

var_dump($cachorro);exit;

O retorno deste código, sem ter o Xdebug habilitado, será este:

PHP

object(Cachorro)#1 (2) { [“raca”:”Cachorro”:private]=> string(6) “Poodle” [“nome”:”Cachorro”:private]=> string(3) “Bob” } object(Cachorro)#1 (2) { [“raca”:”Cachorro”:private]=> string(6) “Poodle” [“nome”:”Cachorro”:private]=> string(6) “Scooby” }

Ou seja, sem quebras de linha entre os objetos ou entre as propriedades do objeto, deixando mais difícil de ler este retorno.

Como habilitar o Xdebug?

Agora, vamos habilitar o Xdebug. Para isso, é preciso baixar a extensão para o PHP instalado em sua máquina ou acessar o site oficial do Xdebug para encontrar as instruções de instalação de acordo com seu Sistema Operacional.

Como utilizar Xdebug em Linux?

Em Linux, basta instalar pelo terminal da sua máquina:

ShellScript

sudo apt-get install php-xdebug

Como utilizar Xdebug no Windows?

Em Windows, é preciso baixar a dll, colocar na pasta de extensões e adicioná-lo pelo php.ini:

Conteúdo php.ini

zend_extension=”c:\caminho\para\sua\pasta\de\extensoes\xdebug.dll”

xdebug.remote_enable=1

xdebug.remote_port=9000

Como utilizar Xdebug em MacOSx?

Em MacOSx:

pecl

pecl install xdebug

O que fazer após a instalação do Xdebug?

Agora, com Xdebug instalado, acesse novamente sua página e veja a saída do var_dump formatada com quebras de linha e cores para melhor visualização:

PHP (xdebug_var_dump.png)

/caminho/para/seu/script/index.php:37:

object(Cachorro)[1]

  private ‘raca’ => string ‘Poodle’ (length=6)

  private ‘nome’ => string ‘Bob’ (length=3)

/caminho/para/seu/script/index.php:39:

object(Cachorro)[1]

  private ‘raca’ => string ‘Poodle’ (length=6)

  private ‘nome’ => string ‘Scooby’ (length=6)

Por último, também podemos utilizar a própria IDE para nos ajudar a debugar a aplicação, assim como as IDE’s de linguagens compiladas. Vamos tomar o PHPStorm como exemplo, mas, primeiramente, devemos garantir que ele esteja conseguindo se comunicar com o Xdebug. Para isso, vá em:

  • File;
  • Settings;
  • Languages & Frameworks;
  • PHP;
  • Debug.

A IDE costuma vir configurada corretamente, mas, para testar, clique em “Validate debugger configuration on the Web Server”. Em “Path to create validation script”, coloque o caminho para ser gerado o script e em “Url to validation script”, a url para acessá-lo:

validate php storm

validate script

Após garantir que a IDE consegue conversar com o Xdebug, baixe a extensão para o seu navegador conversar com a IDE e prossiga com a validação. No PHPStorm, marque até qual linha desejas fazer a depuração clicando no número da linha:

linha marcada

No seu navegador, ative a extensão e acesse o seu script de teste, o que fará com que você seja imediatamente redirecionado para o seu PHPStorm e veja o passo a passo do que está sendo feito:

passo a passo

Esse comentários em cinza são gerados pela própria IDE se comunicando com o Xdebug, e com isso, conseguimos entender que na função setNome está sendo recebido o valor “Scooby“, mas, a propriedade nome continua como “Bob“.

Leia também: PHP 8 — Novidades E Impactos No Desenvolvimento Web

Como vimos até aqui, existem muitas abordagens para depurar uma aplicação em PHP, combinando o var_dump() com Xdebug, com uma IDE, ou apenas utilizando-o no script. De qualquer forma, fazer a depuração em PHP é simples e ágil.

Quer obter resultados ainda melhores com seu site? Conheça os planos de hospedagem da KingHost e garanta um ambiente seguro e otimizado para suas aplicações web.

O que você achou deste conteúdo?

O que você achou deste conteúdo?

Redação KingHost
Redação KingHost
Somos uma empresa de soluções digitais, especialistas em simplificar o uso da tecnologia e referência em hospedagem de site.
Redação KingHost
Redação KingHost
Somos uma empresa de soluções digitais, especialistas em simplificar o uso da tecnologia e referência em hospedagem de site.

Compartilhe esse conteúdo com alguém que possa gostar também

Receba todo mês conteúdos
incríveis como esses para
seguir evoluindo

Conteúdos relacionados

Se você chegou até este artigo, provavelmente está pensando em criar um site WordPress para sua empresa, blog pessoal, portfólio ou loja virtual. Seja qual for o objetivo, escolher WordPress como plataforma é uma decisão estratégica inteligente. Esse sistema de gestão de conteúdo (CMS) conquistou milhões de sites ao redor do mundo e é sinônimo...
A inteligência artificial (IA) não é mais uma promessa distante, mas sim uma realidade que está remodelando o cenário do desenvolvimento de aplicativos. A demanda por apps que não apenas funcionam, mas que também aprendem, se adaptam e antecipam as necessidades dos usuários está em alta.  Integrar a IA em seus aplicativos oferece uma gama...

Mensagens para você