DEV Community

Wesley Gonçalves
Wesley Gonçalves

Posted on Edited on

Xdebug em Docker usando VScode

Configurando Xdebug em containers Docker

Realizar debugs em código PHP pode ser uma tarefa ardua muitas vezes, mas ferramentas como o Xdebug podem tornar esse trabalho mais fácil uma vez que permite realizar o monitoramento da aplicação durante o desenvolvimento diminuindo a propagação de erros para a produção.

Indice

DockerFile e docker-compose

Inicialmente é importante entender a nossa estrutura dentro do diretório .docker, nele temos os arquivos e configuração do servidor web(NGIN-X), banco de dados(MySQL) e do PHP. Esses arquivos serão copiados para dentro dos containers da aplicação.
## PHP
Aqui temos a configuração necessária para habilitar o Xdebug no container.

    [xdebug]
    ; zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20210902/xdebug.so //instala a extensão caso o docker não funcione
    xdebug.mode=debug // modo de execusão do xdebug
    xdebug.start_with_request=trigger // faz o rastreamento de função, depuração e coleta de estatísticas de lixo. 
    xdebug.idekey=VSCODE // id para identificar nossa aplicação   
    xdebug.client_host=host.docker.internal // conecta nosso host ao host do docker
    xdebug.log=/var/www/storage/logs/xdebug.log // salva os logs durante a execução 
    xdebug.client_port=9003 // porta usada para transmissão das informações 
Enter fullscreen mode Exit fullscreen mode

Como o parâmetro xdebug.start_with_request está como trigger ela precisa da extensão Xdebug helper no navegador para que toda Url acessada dispare o monitoramento do xdebug. Também é necessário configurar no Xdebug helper uma chave que identifica a IDE que estamos utilizando. Ao selecionar as preferências sua chave deve ser a mesma que está escrita em xdebug.idekey você encontrará a seguinte imagem.

Image description

Docker-compose

Em seu arquivo com docker-compose.yml garanta que o serviço que esteja rodando o PHP tenha essa configuração.

extra_hosts:
      - "host.docker.internal:host-gateway"
Enter fullscreen mode Exit fullscreen mode

Isso dá a certeza que seu host do sistema tenha acesso ao que é processado nos containers, essas informações estarão disponíveis para consulta em sua IDE.

VsCode

Agora no VScode precisamos habilitar a extensão PHP Xdebug quando for executada pela primeira vez ela irá criar um diretório de nome .vscode e dentro dele um arquivo de nome launch.json é neste arquivo que é dado o caminho das pedras para o vscode acessar as informações/logs gerados pelo Xdebug

"configurations": [

   {
      "name": "Listen for Xdebug",
      "type":"php",
      "request": "launch",
      "hostname": "0.0.0.0", //aqui temos a garantia de estamos acessando o docker da aplicação
      "log": true,
      "port": 9003, // a mesma definida no xdebug.client_port
      "pathMappings": {
            "/var/www" : "${workspaceFolder}" //rota onde nosso projeto se encontra dentro do container  

      },
      "xdebugSettings": {
            "max_children": 10000,
            "max_data": 10000,
            "show_hidden": 1
      }
   }
]
Enter fullscreen mode Exit fullscreen mode

Con toda essa estrutura montada agora temos que testar se nossa configuração funciona, para isso criamos um diretório de nome public com um arquivo ***index.php e dentro dele o seguinte código.

 phpinfo();exit; 
Enter fullscreen mode Exit fullscreen mode

Ao rodar seu projeto no local você terá todas as informações sobre o comportamento do xdebug como mostrado na imagem a seguir.

Image description

Se nenhuma mensagem de erro dentro de diagnostic log for apresentada então sua configuração de completa e agora pode se garantir debugando seu projeto.

Logs

Criamos também diretórios de nome storage/logs somente com o objetivo de armazenar todos os logs criados pelo xdebug durante o processo de debug.

Algumas referências

Top comments (0)