No PHP, usar var_dump(), print_r() e afins no meio do código não só é uma maneira pouco eficiente como pouco elegante de encontrar e reduzir erros no código. Depurar é uma boa maneira de fazer isso e temos uma ótima extensão do PHP chamada xDebug para nos ajudar.
Instalação
No Windows, a maneira mais simples de instalar o xdebug é baixar a extensão como dll no site oficial da extensão e configurar o php.ini para que o PHP possa reconhecer a extensão:
zend_extension_ts="C:/caminho/para/o/php/ext/php_xdebug.dll"
Para as versões até 5.2.x deve ser usado zend_extension_ts, enquanto que para a 5.3, zend_extension.
Além disso, podemos setar algumas configurações da própria extensão no arquivo. Algumas específicas, para permitir saber mais sobre o que acontece na execução:
xdebug.collect_includes = On xdebug.collect_params = On xdebug.collect_return = On xdebug.collect_vars = On xdebug.dump_globals = On xdebug.show_local_vars = On xdebug.dump.GET=* xdebug.dump.POST=* xdebug.dump.COOKIE=* xdebug.dump.ENV=* xdebug.dump.FILES=* xdebug.dump.REQUEST=* xdebug.dump.SERVER=* xdebug.dump.SESSION=*
Dando um restart no Apache, o xdebug deve estar listado no phpinfo() com todas as configurações setadas.
Usos do xdebug
Podemos conseguir diversos tipos de informações sobre o que acontece em nossa aplicação. O mais comum é o xdebug mostrar no html quais erros acontecem. Faça o teste:
<?php
$teste = array("um", "teste", "qualquer");
include("umarquivonaoexistente.php");
var_dump($var);
?>
Rodando a página, ele nos diz que não encontrou o arquivo não existe e nos mostra os valores das variáveis até dar que o erro ocorresse. Além disso, podemos observar que o var_dump() foi sobrescrito pelo xdebug, tornando mais fácil a leitura dos valores.
Trace
Podemos também coletar informações sobre a execução do arquivo, guardando em um arquivo separado. O Trace pode ser feito tanto pelo arquivo de configuração:
xdebug.auto_trace=1 xdebug.trace_output_dir=/caminho
quanto individualmente, no arquivo:
<?php
xdebug_start_trace("/caminho/para/o/trace");
$soma = soma(1,2);
xdebug_stop_trace();
?>
Xdebug Remoting
Podemos também configurar o xdebug para ser usado com IDEs, permitindo assim acompanhar os valores de variáveis, colcoar pontos de parada como é normalmente feito no debug com outras linguagens.
Para permitir que isso aconteça, tem que adicionar nas configurações:
xdebug.remote_enable=1 xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
Diversas IDEs e editores já funcionam com o xdebug: Netbeans, Eclipse, Notepad++, o plugin para o VIM, entre outros.