Documentação
/
Receitas
/

Diagnosticando erros de execução da VM

Diagnosticando erros de execução da VM

Seu código ofuscado por VM lança um erro em tempo de execução — pode ser um RangeError: Invalid array length, mas o mesmo checklist vale para outros erros inesperados que só aparecem depois da ofuscação. Siga os passos abaixo em ordem. O primeiro pega a causa de longe mais comum; os demais ajudam a isolar um bug de verdade.

Passo 1 — Verifique o ambiente de execução em relação à opção target

A causa isolada mais comum de Invalid array length e erros semelhantes é uma incompatibilidade entre a opção target e o ambiente em que o código realmente roda, combinada com vmSelfDefending: true.

Ambientes em que isso dispara:

  • Node.js (executando o bundle ofuscado diretamente com node)
  • Chrome / Chromium headless, PhantomJS
  • Puppeteer, Playwright, Cypress, Selenium / ChromeDriver, Nightmare
  • jsdom e outras emulações de DOM no servidor
  • Qualquer ambiente em que os builtins nativos do navegador tenham recebido hooks ou tenham sido substituídos

Se o seu ambiente de execução está nessa lista, o erro é a proteção funcionando como planejado, não um bug. Escolha a solução que corresponde ao seu caso:

  • Rodando em Node.js de propósito (script no servidor, ferramenta de CLI, processo principal do Electron): defina target: 'node' ao ofuscar. A camada de self-defending vai se calibrar para o Node em vez do navegador.
  • Rodando testes automatizados / E2E em um build ofuscado (Cypress, Playwright, Puppeteer, Selenium): gere um build de teste separado com vmSelfDefending: false. A opção foi feita para quebrar automação; ela não pode ser liberada para ferramentas individuais. Veja VM Self Defending para a lista completa de ambientes incompatíveis.
  • Rodando em um navegador de verdade e ainda vendo o erro: confirme que nenhuma extensão, script de devtools ou página que envolve o app está instalando hooks nos builtins nativos (Array, Function.prototype, JSON etc.). Reproduza em um perfil limpo antes de tratar isso como um bug.

Passo 2 — Reduza até uma única função

Se o Passo 1 não resolveu, o erro está em um trecho específico do código transformado. Mude para vmTargetFunctionsMode: 'comment' e adicione /* javascript-obfuscator:vm */ a uma função de cada vez até o erro reaparecer. A função que você marcou quando o erro voltou é a culpada — esse é o repro mínimo que você vai enviar ao suporte.

Passo 3 — Envie um relatório de bug

Depois de confirmar que não é uma incompatibilidade de target/self-defending e de ter uma função isolada, envie um e-mail para support@obfuscator.io. Quanto mais dos itens abaixo você incluir, mais rápido conseguimos corrigir:

  • Stack trace completo do erro, exatamente como aparece no console — não uma paráfrase.
  • Opções do ofuscador em JSON. Copie o objeto de opções inteiro que você usou (ou o nome da predefinição mais as sobrescritas). Interações sutis entre opções são comuns, então precisamos do conjunto exato.
  • Versão do obfuscator — mostrada no canto inferior direito do editor.
  • Ambiente — navegador + versão, versão do Node.js, SO e qualquer coisa fora do comum no runtime (extensões, polyfills, builtins personalizados).
  • Reprodução mínima — de preferência a única função do Passo 2, mais o ponto de chamada necessário para disparar o erro.
  • O código-fonte original (antes da ofuscação), quando possível. A saída ofuscada é opaca do nosso lado também; sem a entrada, ficamos fazendo engenharia reversa do nosso próprio bytecode.