Canais iMasters

PHP + MySQL

Xdebug: instalação, configuração e utilização com WAMP Server

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.

Instalação

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.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 ServerFigura 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/".

Configuração

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á instaladoFigura 3: Observe a linha informando que o Xdebug está instalado

Figura 4: Parâmetros do Xdebug.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 SESSION

Elton 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

Utilização

É 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.Figura 5: Nova saída de erro do PHP, com o Xdebug.

Profiling

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\tmp

Lembre-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.Figura 6: KCachegrind, ferramenta de Profiling.

Trace

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 = 0

Exemplo 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]
Debug

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=1

Conclusão

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

Referências

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

Stefan Priebsch. Introducing Xdebug. http://devzone.zend.com/article/2803-Introducing-xdebug

XDEBUG. http://www.xdebug.org

WAMP Server. http://www.wampserver.com


Comente também

13 Comentários

Vinicius Alegreti Meza
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
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
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
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
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.

José Cláudio Medeiros de Lima
José Cláudio Medeiros de Lima

Só complementando....
A partir do php 5.3, sai o zend_extension_ts e entra o zend_extension, sem o "ts".
Outra coisa, é importante frisar que o caminho no zend_extension tem que o caminho absoluto, senão não funciona nem a pau.

José Cláudio Medeiros de Lima
José Cláudio Medeiros de Lima

Em windows, podemos usar o webgrind, que roda no próprio servidor, e o wincachegrin: http://sourceforge.net/projects/wincachegrind/

Fabiano Melo Moreira
Fabiano Melo Moreira

Cara estou tentando baixar o x-debug, mas o meu php é o 5.2.6 e não achei estensão para este.. ou acho para 5.2.5 ou 5.2.8 , ou ainda 5.2.vc6... Alguma dica?

flávio
flávio

boa noite... alguem pode me ajudar instalei o wampserver 2.1, criei uma alias e defini a pasta dos arquivos, mas nao consigo acessar pelo internet explorer... alguem pode me ajudar a configurar para que eu possa acessar meu arquivos que vou criando...

Murillo
Murillo

Nussa mew, dias tentando fazer esse Xdebug funcionar no Eclipse, e com algumas dicas suas tudo rodou legal, parabéns!

renato
renato

este link abaixo é do youtube nele esta ensinando passo a passo como configurar e instalar wampserver.

link para wampserver:
http://www.youtube.com/watch?v=Ldu1VqwyEi4&list=PL9645028BCF5A0315

link para wordpress:
http://www.youtube.com/watch?v=5kcsKSajcqE&list=PL6B2B623F6E2BEB0E

diogo
diogo

Ola pessoal vou deixar um link de video tutorial WAMPSERVER

http://www.youtube.com/watchv=Ldu1VqwyEi4&list=PL9645028BCF5A0315&feature=view_all

aproveite para ver as novidades do canal em

http://www.youtube.com/user/diogocs32?feature=mhee

diogo
diogo

este Tutorial mostra passo a passo como instalar e configurar o servidor wampserver.

http://www.youtube.com/watch?v=Ldu1VqwyEi4

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize