Executando verificação de segurança...
1

Obrigado pelo comentário! Então, eu uso Windows com WSL e é uma dor utilizar o Xdebug nesse setup. Toda vez que preciso remontar o container, tenho que configurar tudo de novo. O Xdebug funciona muito bem quando está tudo na sua máquina local e estável, mas quando falamos de containers a história muda completamente.

Além disso, debugar algo não é apenas colocar breakpoints e ver valores de variáveis — ainda mais em 2026. Precisamos pensar fora da caixa e usar todas as ferramentas ao nosso alcance, como IA. Foi com essa mentalidade que desenvolvi o DDLess: primeiro para ajudar quem tem dificuldade com o Xdebug, e segundo para quem já conhece o processo de debug mas quer algo mais simples e poderoso, com ferramentas que vão além do breakpoint tradicional.
O processo de desenvolvimento foi cheio de pivôs. Comecei tentando resolver o debug usando o phpdbg como ponte de comunicação. Mas senti que estava colocando uma barreira no DDLess, porque a pessoa precisava ter o phpdbg instalado no PHP — algo que deveria vir compilado por padrão, mas nem sempre vem. Cada amigo que testava reclamava, cada teste feito eu sentia que o processo era doloroso demais. Foi um retrocesso.

Então pensei: vou usar regex com instrumentação de arquivos. Basicamente, eu copio os arquivos que vão ser debugados, insiro minhas funções globais nas linhas onde o breakpoint deve atuar, e pronto — funciona sem nenhuma dependência. Mas aí veio outro problema: regex é outra dor. O programador PHP escreve a sintaxe de diversas maneiras diferentes e não dá pra esperar que todo mundo siga a PSR. Cada edge case quebrava algo.

Então fui para outro nível: removi o regex e passei a usar AST parsing (nikic/PHP-Parser). Isso matou o problema de vez. Pode parecer um mini compilador, mas é o que garante que a instrumentação funciona independente de como o código foi escrito.

Eu utilizei electronJS, reactjs, php como base da comunicação com o projeto.

Fluxo de Debug:

  1. Dev seta breakpoint → Electron escreve breakpoints.json
  2. Dev envia request → Electron executa PHP com DDLESS_DEBUG_MODE=true
  3. PHP carrega debug.php → instrumenta código via AST
  4. PHP executa → atinge breakpoint → escreve breakpoint_state.json
  5. PHP fica em loop (polling breakpoint_command.json)
  6. Electron detecta breakpoint_state.json (polling 100ms)
  7. UI mostra variáveis, stack, waterfall
  8. Dev clica Continue → Electron escreve breakpoint_command.json
  9. PHP lê comando → retoma execução
Carregando publicação patrocinada...
4