Depuração de código PHP: técnicas e ferramentas para profissionais

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que a depuração é um superpoder do desenvolvedor

\n\n

Você já ficou sentado à noite, olhando para o monitor, sem conseguir entender por que seu site PHP exibia a tela branca da morte? Ou, pior ainda, números incorretos em um relatório? Parabéns, você se deparou com a depuração. Muitos iniciantes temem essa palavra, achando que depurar código PHP é coisa de gurus selecionados. Na verdade, é apenas uma habilidade que pode e deve ser treinada.

\n\n

Neste artigo, não vamos apenas listar funções. Vamos analisar cenários reais: desde o simples var_dump() até a configuração do Xdebug na IDE. Você aprenderá como transformar o processo de busca de erros em uma rotina estruturada, e não em um palpite no escuro. Vamos lá!

\n\n

1. Clássico do gênero: var_dump e print_r

\n\n

A maneira mais simples de depurar PHP é inserir var_dump($variable) em um local suspeito. Mas há um detalhe: nem todos fazem isso corretamente.

\n\n

O var_dump correto

\n

Muitos escrevem assim:

\n
var_dump($user);
\n

E obtêm uma bagunça na tela. É melhor formatar a saída:

\n
echo '<pre>';\nvar_dump($user);\necho '</pre>';\ndie(); // interrompe a execução para não atrapalhar o restante da saída
\n\n

E para arrays e objetos, é mais conveniente usar print_r() com a flag true para salvar o resultado em uma string:

\n
$data = print_r($users, true);\nfile_put_contents('debug.log', $data, FILE_APPEND);
\n\n

Dica: Nunca deixe var_dump em produção. Use depuração condicional:

\n
if (defined('DEBUG_MODE') && DEBUG_MODE) {\n    var_dump($variable);\n}
\n\n

2. Log: seu melhor amigo em produção

\n\n

Quando o site já está no servidor, você não pode simplesmente exibir o erro na tela. É aí que entra o log PHP. A função embutida error_log() é a base.

\n\n

Como configurar o error_log

\n

No arquivo php.ini, especifique:

\n
error_reporting = E_ALL\ndisplay_errors = Off\nlog_errors = On\nerror_log = /var/log/php_errors.log
\n\n

Agora, todos os erros, incluindo avisos, serão gravados no arquivo. E no código, você pode fazer assim:

\n
if ($result === false) {\n    error_log("Erro na consulta ao BD: " . $db->error, 3, '/var/log/myapp.log');\n    // 3 — significa gravação em arquivo, não no syslog\n}
\n\n

Abordagem moderna: Monolog

\n

Para projetos sérios, use a biblioteca Monolog. Ela pode gravar em arquivos, no Slack, no banco de dados e até no Telegram. Exemplo de configuração:

\n
use Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n$log = new Logger('my_app');\n$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::WARNING));\n$log->warning('Usuário tentou acessar sem permissão', ['user_id' => 123]);
\n\n

3. Xdebug: motor reativo de depuração

\n\n

Se você ainda não instalou o Xdebug, está perdendo tempo. Não é apenas uma ferramenta — é um foguete para o desenvolvedor. Ele permite definir pontos de parada (breakpoints), visualizar valores de variáveis em tempo real e até perfilar o código.

\n\n

Instalação e configuração

\n

Instale via gerenciador de pacotes:

\n
pecl install xdebug\n# ou para Ubuntu:\nsudo apt install php-xdebug
\n\n

Adicione no php.ini:

\n
zend_extension=xdebug.so\nxdebug.mode=debug\nxdebug.start_with_request=yes\nxdebug.client_host=127.0.0.1\nxdebug.client_port=9003
\n\n

Agora configure sua IDE. No PhpStorm, isso é feito em dois cliques: configure o interpretador PHP e clique em "Start Listening for PHP Debug Connections".

\n\n

Como funciona na prática

\n

Defina um ponto de parada (círculo vermelho) na linha com o código suspeito. Execute o script no navegador com o parâmetro ?XDEBUG_SESSION_START=1.

Blogs

Book Recommendations