Subscribe to ACAlbuquerque.BlogRSS

Qualidade de código PHP – xDebug

Em 14/09/2009 by acalbuquerque  
categorizado em PHP, Tecnologia

Como o processo de desenvolvimento de software é sujeito a erros, a atividade de teste é fundamental para se obter produtos com garantia de qualidade. Portanto, é importante que você tenha antes de qualquer coisa, essa afirmação anterior como regra a ser seguida.

Fazer o debug de aplicações PHP sempre foi um grande problema. Utilizar echo e var_dump não é a melhor maneira, além de não ser nada elegante. Existe uma forma de realizar o debug de aplicações PHP de forma mais correta e útil. Esta forma é usando­-se a extensão chamada xdebug.

O que é isso?

O Xdebug é uma extensão para PHP que como o próprio nome sugere, serve para auxiliar no debug de scripts PHP.

O que isso faz?

O Xdebug vai mostrar diversas informações importantes sobre o erro. O Xdebug adiciona várias opções ao php, uma delas é refazer o var_dump.

Como Instalar?

O meu ambiente de testes é o Ubuntu 9.04, porém se você é usuário Windows o mais fácil é fazer o download de um arquivo dll no site e salvá-­lo no diretório ext do PHP.
Para usuários Linux, a melhor maneira é fazer a instalação usando o comando pecl:

$ sudo apt-get install php5-dev php-pear
$ sudo pecl install xdebug

No meu caso o xdebug ficou em:
/usr/lib/php5/20060613+lfs/xdebug.so

Para que o php considere o uso da extensão, o arquivo de inicialização php.ini deve ser editado
sudo gedit /etc/php5/apache2/php.ini

acrescente no fim do arquivo:
zend_extension=”/usr/lib/php5/20060613+lfs/xdebug.so”

Ou para windows: zend_extension_ts=”c:/xampp/php/ext/php_xdebug.dll”

Após isso, adicione as configurações do xdebug:

xdebug.default_enable = On
xdebug.collect_includes = On
xdebug.collect_params = On
xdebug.collect_return = On
xdebug.collect_vars = On

E agora basta reiniciar o apache:
sudo /etc/init.d/apache2 restart

- Novo var_dump

Quando a extensão está ativa, o comando var_dump mostra informações mais detalhadas das variáveis. Para testar é só executar o var_dump passando como parâmetro qualquer variável ou objeto do script. ex:

<?php
$dados = array(
'um' => 'uma string',
'dois' => array(
'two.one' => array(
'two.one.zero' => 210,
'two.one.one' => array(
'two.one.one.zero' => 3.141592564,
'two.one.one.one' => 2.7,
),
),
),
'tres' => $t,
'quatro' => range(0, 5),
);
var_dump( $dados );
?>

Proteção de memória

É possível configurar o Xdebug para proteger o servidor em caso de um loop infinito, que poderia consumir muitos recursos. Por default  o Xdebug configura para 100 iterações. Para modificar esta características deve­se adicionar a seguinte linha no php.ini e depois reinicie o apache:

xdebug.max_nesting_level=10

Assim, o programa abaixo vai invocar a função loop_infinito() somente dez vezes e depois irá gerar um erro:

erro log Qualidade de código PHP   xDebug

- Coletando mais informações

Para que o Xdebug possa coletar mais informações sobre os erros é possível configurá-­lo para capturar as variáveis globais como POST, GET, FILES, etc. Para isso é só adicionar as linhas abaixo no php.ini e depois reinicie o apache:

;; //Capturar as variáveis globais
xdebug.dump.GET=*
xdebug.dump.POST=*
xdebug.dump.COOKIE=*
xdebug.dump.ENV=*
xdebug.dump.FILES=*
xdebug.dump.REQUEST=*
xdebug.dump.SERVER=*
xdebug.dump.SESSION=*

ps: O *( lê-se coringa) pode ser substituído pelo nome da variável que se deseja capturar.

Testes

Quantas funções foram invocadas no script?

<?php
echo xdebug_get_function_count();
?>

Quanto tempo demorou a execução?

<?php
for($i=0;$i<1000000;$i++) {
 $j = $i;
}
echo "Tempo de execução=". xdebug_time_index();
?>

Quanta memória utilizou?

<?php
echo "Memória: ", xdebug_memory_usage(), " bytes\n\n";
for($i=0;$i<1000000;$i++) {
 $j = $i;
}
echo "Máximo de Memória usada: ", xdebug_peak_memory_usage(), " bytes\n";
?>

Trace da aplicação

Para acompanhar o fluxo da aplicação é preciso adicionar as linhas abaixo no php.ini e depois reinicie o apache:

xdebug.auto_trace=1
xdebug.trace_output_dir=/tmp
xdebug.trace_options=1
xdebug.trace_format = 0

Desta  forma   será   criado   um   arquivo   no  /tmp  chamado   trace.???   para   cada   script   PHP   que  for executado. Neste arquivo estará descrito cada comando executado, variáveis criadas, etc. Assim facilita a visualização do fluxo do script e eventuais erros.

Profiling

Profiling é uma maneira de visualizar quais partes do código do script estão demorando mais para executar. O Xdebug precisa ser configurado para poder gerar estas estatísticas. Para isso deve-­se adicionar as linhas no php.ini e depois reinicie o apache:

xdebug.profiler_enable = 1
xdebug.extended_info = 0
xdebug.remote_enable = 0
xdebug.profiler_output_dir=/tmp

Após a execução de um script é gerado um arquivo no /tmp com as estatísticas de execução. Para analisarmos   estas   estatísticas   pode­se   usar   uma   ferramenta   gráfica de cache profiling como kcachegrind(para Linux), WinCacheGrind(para windows) ou a ferramenta web Webgrind.

Enfim, existem outras funcionalidades que podem ser somadas e usadas com o xDebug, mas isso fica para um próximo post.

Referências:

http://www.xdebug.org/

http://www.eltonminetto.net

http://code.google.com/p/webgrind/

http://morgamic.com/

jQuery Tools

Em 13/09/2009 by acalbuquerque  
categorizado em Destaques, JS/HTML, Tecnologia, jQuery

Esta biblioteca(jQuery Tools) contém seis das ferramentas mais úteis do Javascript disponíveis para um site de hoje. A beleza desta biblioteca é que todas essas ferramentas podem ser usadas juntas. No final, você pode ter centenas de elementos diferentes e novas maneiras de usar a biblioteca.

Esta biblioteca é de código fonte aberto e de licensa  dupla, MIT e  GPL 2 .

O pacote contém uma série de demos, incluindo:

  • Tabs
  • Tooltips
  • Expose
  • Overlay
  • Scrollable
  • Flashembed