Xdebug é uma aprimorada extensão para a linguagem PHP que fornece funcionalidades de debug, profiling e trace. Neste artigo iremos mostrar como instalar, configurar e utilizar o Xdebug com o WAMP Server. O WAMP Server proporciona sob a plataforma Windows um ambiente conjunto do Apache, MySQL e PHP.
Baixe do site oficial do Xdebug (www.xdebug.org) a extensão propriamente dita. Em nosso caso iremos instalar o Xdebug 2.0.3 para o PHP 5.2.5.
Figura 1: Site oficial do XDEBUG: http://www.xdebug.org.
Em nosso exemplo instalamos o WAMP Server 2.0. Observe o ícone do WAMP no tray do Windows. É possível parar e reiniciar os serviços do WAMP através deste ícone.
Figura 2: Menu de acesso do WAMP Server
Em nosso caso o PHP instalado é o 5.2.5, portanto o Xdebug deve ser o "php_xdebug-2.0.3-5.2.5". Repare que a versão do Xdebug é xdebug-2.0.3 para o PHP 5.2.5. Atente-se para isto, caso contrário o Xdebug não funcionará adequadamente.
Agora, apenas copie a DLL do Xdebug para o diretório "/wamp/bin/php/php5.2.5/ext/".Feito a instalação passemos a configuração. Primeiramente edite o arquivo "php.ini" que encontra-se na pasta do Apache e adicione a linha:
zend_extension_ts="<caminho_do_Wamp Server>\bin\php\php5.2.5\ext\php_xdebug-2.0.3-5.2.5.dll"Você pode inserir esta linha em qualquer lugar do arquivo "php.ini" mas como sugestão de organização insira a linha onde estão declaradas as outras extensões. Reinicie o WAMP Server. Em seguida crie uma página chamada "phpinfo.php" que contenha o comando:
<?php
PHPINFO();
?>Para o caso acima, por exemplo, acesse a página em http://localhost/phpinfo.php. Caso o Xdebug tenha sido corretamente instalado e configurado as informações retornadas pela página "phpinfo.php" referente ao Xdebug serão muito parecidas com as reproduzidas nas figuras 3 e 4.
Figura 3: Observe a linha informando que o Xdebug está instalado
Figura 4: Parâmetros do Xdebug.
Derick Rethans, o criador do Xdebug, sugere algumas outras configurações a se acrescentar ao arquivo "php.ini":
; ponto e vírgula é considerado comentário para um arquivo .ini
; protege o servidor em caso de loop infinito
xdebug.max_nesting_level=4
xdebug.collect_params=1
xdebug.show_local_vars=1
; mostra retornos GET do browser
xdebug.dump.GET=*
;mostra retornos do campos username e password
xdebug.dump.POST=username,password
;Tambem serve para: COOKIE, ENV, FILES, REQUEST, SERVER and SESSIONElton Minetto, um desenvolvedor PHP, sugere as configurações abaixo para o Xdebug:
xdebug.default_enable = On
xdebug.collect_includes = On
xdebug.collect_params = On
xdebug.collect_return = On
xdebug.collect_vars = On
xdebug.dump_globals = OnÉ importante lembrar que o Xdebug deve ser instalado somente em um Servidor de Desenvolvimento, nunca em um Servidor de Produção. Sua ajuda é enorme no sentido de melhorar a qualidade, agilidade e segurança no desenvolvimento de aplicações PHP.
Como primeiro teste de utilização do Xdebug, crie um script PHP com erro e execute-o. O Xdebug vai mostrar diversas informações importantes sobre o erro. O Xdebug oferece alternativas para melhorar a saída do comando "var_dump();". Na Figura 5 um exemplo de tela de erro retornada com o Xdebug, repare que agora a qualidade e quantidade de informação é muito maior que o padrão das mensagens de erro retornadas pelo PHP sem o Xdebug.
Figura 5: Nova saída de erro do PHP, com o Xdebug.
Esta é uma maneira de visualizar quais partes do código fonte estão demorando mais para executar. O Xdebug precisa ser configurado para poder gerar estas estatísticas. Para isso é preciso adicionar as seguintes linhas no arquivo "php.ini":
xdebug.profiler_enable = 1
xdebug.extended_info = 0
xdebug.remote_enable = 0
xdebug.profiler_output_dir=d:\wamp\tmpLembre-se que para as alterações no arquivo "php.ini" tenham efeito é preciso reiniciar o Apache. Pelo menu do WAMP Server isso é muito fácil de fazer. Com o profiling habilitado, após a execução de qualquer arquivo php da aplicação será gerado um arquivo no diretório temporário com as estatísticas de execução. Em nosso exemplo o diretório temporário é "d:\wamp\temp".
Utilizando o KCachegrind (Figura 6), ferramenta que trabalha com o Xdebug e atua como um profiler, abra este arquivo e observe em modo visual diversas informações com tipos de performance do código, proporcionando uma vantagem considerável ao desenvolvedor.
Figura 6: KCachegrind, ferramenta de Profiling.
Trace significa acompanhar o fluxo da aplicação. É preciso indicar onde o trace da aplicação deve começar e terminar:
<?php
xdebug_start_trace();
// aqui o código PHP a ser acompanhado
xdebug_stop_trace();
?> Um arquivo no diretório temporário do servidor com o nome trace.??.xt será criado com as saídas do trace. Este arquivo conterá todas as informações referente ao trace das páginas acessadas.
Outra forma de habilitar o trace é no arquivo "php.ini", desta forma o trace estará habilitado para toda a aplicação e será rastreado os acessos a todas as páginas.
xdebug.auto_trace=1
xdebug.trace_output_dir=d:\wamp\tmp
xdebug.trace_options=1
xdebug.trace_format = 0Exemplo do conteúdo de um arquivo trace:
TRACE START [2008-07-11 19:31:31]
0.0034 123888 -> {main}() D:\wamp\www\teste\chama.php:0
0.0036 129504 -> xdebug_memory_usage() D:\wamp\www\teste\chama.php:4
>=> 129504
0.0038 129648 -> xdebug_start_trace(string(16)) D:\wamp\www\teste\chama.php:5
>=> FALSE
0.9181 129720 -> xdebug_stop_trace() D:\wamp\www\teste\chama.php:12
0.9182 129720
TRACE END [2008-07-11 19:31:32]
TRACE START [2008-07-11 19:31:33]
-0.0114 13120
TRACE END [2008-07-11 19:31:33]
TRACE START [2008-07-11 19:31:33]
0.0091 13120
TRACE END [2008-07-11 19:31:33]
TRACE START [2008-07-11 19:33:25]
0.0119 49168 -> {main}() D:\wamp\www\teste\relogio.php:0
0.0120 49200 -> uniqid() D:\wamp\www\teste\relogio.php:3
>=> ´4877b585bdeca´
>=> 1
0.0164 13752
TRACE END [2008-07-11 19:33:25]Um debug é uma ferramenta muito importante para auxiliar o processo de desenvolvimento de software, proporcionando pontos de parada no código e inspeção de valor das variáveis. Para fornecer um debug da aplicação, é preciso uma IDE (Ambiente de Desenvolvimento Integrado) que forneça suporte ao Xdebug.
Dentre as IDEs que se encaixam nesta categoria podemos citar o Eclipse, Notepad++ e o PHPEdit. Para habilitar o Xdebug adicione as linhas abaixo no "php.ini":
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.extended_info=1A utilização do Xdebug vem aumentando, hoje é possível encontrar mais artigos e desenvolvedores que o utilizam, pois os benefícios são óbvios. Sugiro a leitura do documento do Elton Minetto e para quem sabe inglês a palestra do Derick Rethans apresentada no Brasil quando ele veio para o PHP Conference em 2007. O artigo do Stefan Priebsch no Zend Developer Zone é indicado para aqueles que desejam se aprofundar nas artes do Xdebug.
Derick Rethans. Xdebug: PHP Conference Brasil. http://files.derickrethans.nl/xdebug-brasil6.pdf
Elton Minetto. Xdebug. http://www.eltonminetto.net/docs/xdebug.pdf
How to Setup BDGp debugger in Notepad++ to Debug PHP. http://www.judiwa.com/wiki/How_to_Setup_BDGp_debugger_in_Notepad%2B%2B_to_Debug_PHP
KCacheGrind. http://kcachegrind.sourceforge.netStefan Priebsch. Introducing Xdebug. http://devzone.zend.com/article/2803-Introducing-xdebug
XDEBUG. http://www.xdebug.org
WAMP Server. http://www.wampserver.com
Vinicius Alegreti Meza
Ola Everton,
Parabéns pelo artigo. Até então, eu não tinha muito curiosidade em usar o módulo. Entretanto, estou começando a ver vantagens principalmente na ajuda em descobrir falhas e erros. Acredito que isto irá aumentar a produtividade de equipes de desenvolvimento. Aguardo novos artigos.
Forte abraço.
Fernando Martins
Muito bom o seu artigo.
acabo de instalar e verificar qu esta tudo certo.
mas como utilizo a ferramenta
KCachegrind
citada eu tentei baixar mas parece ter apenas para linux existe alguma opção para windows?
Mesmo assim valeu . muito obrigado pelo seu artigo e continue assim
Everton Silva
utilizei o KCachegrind para Win que baixei neste endereco
http://kcachegrind.sourceforge.net/. Porem acessei agora a pouco e a pagina estava fora do ar
Rodrigo Lima
Caro Everton,
Parabéns pelo artigo. Uso Apache2.2/PHP 5.2.11 em Windows Vista, tentei instalar com a diretiva
"zend_extension_ts=C:\Program Files (x86)\PHP\ext\php_xdebug-2.0.5-5.2.dll"
no php.ini mas não surtiu efeito.
Então configurei para
"extension=php_xdebug-2.0.5-5.2.dll",
o phpinfo() então informa que ele está habilitado mas no PHP Error Log ele acusa
"[17-Nov-2009 13:52:09] PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0"
Voce pode me ajudar?
Att
Everton Silva
Rodrigo nunca testei no Win Vista, realmente pode ser algum problema neste sentido. Mas voce deve lembrar de usar a versao do Xdebug propria para a sua versao do PHP. Sua versao de PHP é 5.2.11? voce nao deve usar ....2.0.5-5.2.dlll. Meu conselho é muita tentativa e erro pois a cada mes o PHP e o Xdebug mudam seu jeito e arquivos de configuracao.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.