दस्तावेज़ीकरण
/
रेसिपीज़
/

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' सेट करें। self-defending परत ब्राउज़र के बजाय Node के हिसाब से ख़ुद को कैलिब्रेट कर लेगी।
  • ऑब्फ़स्केटेड बिल्ड पर ऑटोमेटेड टेस्ट / E2E चला रहे हैं (Cypress, Playwright, Puppeteer, Selenium): vmSelfDefending: false के साथ एक अलग टेस्ट बिल्ड बनाएँ। यह विकल्प ऑटोमेशन को तोड़ने के लिए ही बना है; किसी एक टूल के लिए इसे व्हाइटलिस्ट नहीं किया जा सकता। असंगत एनवायरनमेंट्स की पूरी सूची के लिए VM Self Defending देखें।
  • असली ब्राउज़र में चला रहे हैं, फिर भी एरर आ रही है: पुष्टि करें कि कोई एक्सटेंशन, devtools स्क्रिप्ट या रैपर पेज नेटिव बिल्ट-इन्स (Array, Function.prototype, JSON, आदि) को हुक तो नहीं कर रहा। इसे बग मानने से पहले एक साफ़ प्रोफ़ाइल में दोहराकर देखें।

चरण 2 — समस्या को एक फ़ंक्शन तक सीमित करें

अगर चरण 1 से समाधान नहीं हुआ, तो एरर बदले हुए कोड के किसी ख़ास हिस्से में है। vmTargetFunctionsMode: 'comment' पर स्विच करें और एक-एक करके फ़ंक्शन्स पर /* javascript-obfuscator:vm */ जोड़ते जाएँ जब तक एरर फिर से न दिखे। जिस फ़ंक्शन को चिह्नित करने पर एरर लौटी, वही असली कारण है — यही न्यूनतम रीप्रो है जो आप सपोर्ट को भेजेंगे।

चरण 3 — बग रिपोर्ट भेजें

एक बार पुष्टि हो जाए कि यह target/self-defending का बेमेल नहीं है और आपके पास सीमित किया हुआ फ़ंक्शन हो, तो support@obfuscator.io पर ईमेल करें। इनमें से जितनी ज़्यादा जानकारी देंगे, हम उतनी जल्दी समस्या ठीक कर पाएँगे:

  • पूरा एरर स्टैक ट्रेस, ठीक वैसा ही जैसा कंसोल में दिखता है — अपने शब्दों में नहीं।
  • ऑब्फ़स्केटर विकल्प JSON के रूप में। आपने जो पूरा options ऑब्जेक्ट इस्तेमाल किया था उसे कॉपी करें (या प्रीसेट का नाम और उसके ऊपर किए गए बदलाव)। विकल्पों के बीच बारीक अंतर्क्रियाएँ आम हैं, इसलिए हमें ठीक वही सेट चाहिए।
  • ऑब्फ़स्केटर वर्शन — एडिटर के नीचे-दाएँ कोने में दिखता है।
  • एनवायरनमेंट — ब्राउज़र + वर्शन, Node.js वर्शन, OS, और रनटाइम से जुड़ी कोई भी असामान्य बात (एक्सटेंशन, पॉलीफ़िल्स, कस्टम बिल्ट-इन्स)।
  • न्यूनतम रीप्रोडक्शन — आदर्श रूप से चरण 2 वाला अकेला फ़ंक्शन, साथ में वह कॉल साइट जो एरर ट्रिगर करने के लिए ज़रूरी है।
  • मूल (ऑब्फ़स्केशन से पहले का) सोर्स, जहाँ संभव हो। ऑब्फ़स्केटेड आउटपुट हमारे लिए भी अपारदर्शी होता है; इनपुट के बिना हम अपने ही बाइटकोड को रिवर्स-इंजीनियर कर रहे होते हैं।