문서
/
레시피
/

VM 런타임 오류 진단하기

VM 런타임 오류 진단하기

VM 난독화된 코드가 런타임에 예외를 던지는 경우입니다. RangeError: Invalid array length일 수도 있지만, 난독화 후에만 나타나는 다른 예기치 않은 오류에도 같은 점검 목록을 적용할 수 있습니다. 아래 단계를 순서대로 진행하세요. 첫 단계가 압도적으로 흔한 원인을 잡아내고, 나머지 단계는 진짜 버그의 범위를 좁혀 줍니다.

1단계 - target 옵션과 실제 실행 환경을 대조하세요

Invalid array length를 비롯한 유사 오류의 가장 흔한 원인은 target 옵션과 코드가 실제로 실행되는 환경이 어긋난 상태에서 vmSelfDefending: true가 함께 켜져 있는 경우입니다.

이 현상이 발생하는 환경:

  • Node.js (난독화된 번들을 node로 직접 실행하는 경우)
  • 헤드리스 Chrome / Chromium, PhantomJS
  • Puppeteer, Playwright, Cypress, Selenium / ChromeDriver, Nightmare
  • jsdom 등 서버 측 DOM 에뮬레이션
  • 네이티브 브라우저 내장 객체가 후킹되거나 교체된 모든 환경

실행 환경이 위 목록에 해당한다면 그 오류는 버그가 아니라 보호 기능이 설계대로 동작한 결과입니다. 상황에 맞는 해결 방법을 선택하세요.

  • 의도적으로 Node.js에서 실행하는 경우(서버 측 스크립트, CLI 도구, Electron 메인 프로세스): 난독화할 때 target: 'node'로 설정하세요. 자기 방어 계층이 브라우저 대신 Node에 맞춰 조정됩니다.
  • 난독화된 빌드에 대해 자동화 테스트나 E2E를 실행하는 경우(Cypress, Playwright, Puppeteer, Selenium): vmSelfDefending: false로 별도의 테스트 빌드를 만드세요. 이 옵션은 자동화를 차단하도록 설계되어 있어서 특정 도구만 허용 목록에 넣을 수는 없습니다. 호환되지 않는 환경의 전체 목록은 VM 자기 방어를 참고하세요.
  • 실제 브라우저에서 실행하는데도 오류가 나는 경우: 확장 프로그램, 개발자 도구 스크립트, 래퍼 페이지가 네이티브 내장 객체(Array, Function.prototype, JSON 등)를 후킹하고 있지 않은지 확인하세요. 버그로 판단하기 전에 깨끗한 프로필에서 재현해 보세요.

2단계 - 문제가 되는 함수 하나로 좁히세요

1단계로 해결되지 않았다면 오류는 변환된 코드 중 특정 부분에 있습니다. vmTargetFunctionsMode: 'comment'으로 전환한 뒤, 오류가 다시 나타날 때까지 /* javascript-obfuscator:vm */을 한 번에 한 함수씩 붙여 보세요. 오류가 재현된 시점에 표시한 그 함수가 원인이며, 이것이 지원팀에 보낼 최소 재현 코드입니다.

3단계 - 버그 리포트를 보내세요

target/자기 방어 불일치가 아님을 확인했고 문제 함수까지 좁혔다면 support@obfuscator.io로 메일을 보내주세요. 다음 항목을 많이 포함해 주실수록 더 빠르게 수정할 수 있습니다.

  • 전체 오류 스택 트레이스 — 콘솔에 나타난 그대로 보내주세요. 요약이 아니라 원문이어야 합니다.
  • 난독화 옵션 JSON. 사용한 옵션 객체 전체를 복사해 주세요(또는 프리셋 이름과 변경한 값 전부). 옵션 간의 미묘한 상호작용이 흔하므로 정확한 조합이 필요합니다.
  • 난독화 도구 버전 — 편집기 오른쪽 아래 모서리에 표시됩니다.
  • 실행 환경 — 브라우저와 버전, Node.js 버전, 운영체제, 그 밖에 런타임에서 특이한 점(확장 프로그램, 폴리필, 커스텀 내장 객체 등).
  • 최소 재현 코드 — 되도록 2단계에서 찾은 함수 하나와, 오류를 유발하는 데 필요한 호출부를 함께 보내주세요.
  • 난독화 이전의 원본 소스(가능한 경우). 난독화된 결과물은 저희에게도 불투명합니다. 입력이 없으면 저희가 만든 바이트코드를 거꾸로 분석해야 합니다.