O Xdebug é uma extensão para PHP que ajuda o desenvolvimento de aplicações com:
- trace
- profiling
- debug passo a passo
O trace e o profiling são uteis e faceis de obter: a unica atenção é na ocupação de disco já que tendem a produzir ficheiros de alguma dimensão.
O debug tem requisitos algo mais complexos mas seguindo este manual deveria ser possível configurar o ambiente de trabalho de forma adequada.
Requisitos
Existem algumas condições para conseguir fazer um debug clássico da aplicação:
- o servidor ter a extensão Xdebug activa e configurada; para verificar isto é necessário utilizar o phpinfo e verificar se a extensão é presente;
- ter o plugin “Xdebug helper” instalado no browser
Para analisar aos ficheiros produzidos pelo profiler ou tracer é preciso ter acesso à pasta “/tmp” do servidor.
Se é pretendido executar é preciso também:
- estar na mesma rede do servidor e este ultimo conseguir chegar ao IP do cliente
- ter acesso local ás pastas “Wpms” e “Eve” do servidor no mesmo caminho que o próprio servidor (por exemplo “/www/htdocs/Eve”)
- ter um client de debug instalado (por exemplo “Visual Studio Code”) e configurado para ficar a espera na porta 9000
Vamos ver em detalhe:



Configuração shares em Linux
Para experimentar ou ter uma ligação temporaria é possivel executar o mount com um comando do tipo:
sudo mount -t cifs -o username=isr-ldonati //192.168.45.223/Wpms /www/htdocs/Wpms

Para ter uma ligação definitiva que volta a estar disponivel depois de um arranque:
- adaptar o ficheiro /etc/fstab com as seguintes linhas:
- //192.168.45.223/Wpms /www/htdocs/Wpms cifs x-systemd.automount,_netdev,credentials=/etc/samba-credential.conf,uid=1000,gid=1000,x-gvfs-show,user 0 0
- //192.168.45.223/Eve /www/htdocs/Eve cifs x-systemd.automount,_netdev,credentials=/etc/samba-credential.conf,uid=1000,gid=1000,x-gvfs-show,user 0 0
- criar o ficheiro de credenciais /etc/samba-credential.conf com o seguinte conteudo:
- username=[user]
- password=[password]
- domain=ISRETAIL
- atribuir o ficheiro /etc/samba-credential.conf ao utilizador que pretendemos e deixar o grupo “root”:
- chown leopoldo.root /etc/samba-credential.conf
Configuração shares em Windows
A configuração necessaria em Windows é:
- criar directoria local:mkdir C:\htdocsIsRetail
- criar symbolic links para directorias no servidor com os sources:
- mklink /d C:\htdocsIsRetail\Eve \\192.168.45.223\Eve
- mklink /d C:\htdocsIsRetail \Wpms \\192.168.45.223\Wpms
- iniciar VSCode na directoria C:\htdocsIsRetail
- criar um launch.json default e acrescentar a directiva pathMappings
Trace
Profiling
Optimizar o código é muito importante: o sistema passa a ter melhores respostas utilizando menos recursos.
O importante é lembrar que o tempo é um recurso escasso: para o programa correr mas também para o programador. É sempre conveniente encontrar aquela melhoria que em poucos minutos reduz o custo em 50% e não perder um dia em algo que melhora 1%.
Para isto existem instrumentos de profiling.
Uma vez activado no “XDebug Helper” o sinal “Profile”, ao fazer qualquer coisa na aplicação são criados ficheiros no formato “cachegrind.out” + pid do processo na pasta “/tmp/”.
A forma mais simples de analisar estes ficheiros é utilizando um programa de leitura logs como o “KCachegrind”, “QCacheGrind” ou “WinCacheGrind”.
O primeiro impacto pode ser assustador … é precisa alguma calma.
Para ler a documentação sobre KCachegrind é possivel encontrar o manual em https://kcachegrind.github.io/html/Documentation.html
A ideia de base é: encontrar as funções que consomem a maior parte – em percentual – do tempo (sendo que o tempo pode ser expresso em millisegundos, microsegundos, …é relativo) e perceber porque.
Existem substancialmente dois tipos de “problemas”: de facto a função consome muito tempo, a função até é rápida mas é chamada muitas vezes.
Debug
Para conseguir fazer um debug passo a passo de um source é preciso:
- ligar o debug no xdebug helper para que o cookie seja activado
- decidir o primeiro ponto de break
- fazer refresh ou aceder ao report pretendido