VM रनटाइम एरर का निदान
इन चरणों को क्रम से पूरा करें। हर चरण किसी आम कारण को खारिज करता है, इससे पहले कि आप विफल होने वाले कोड को सीमित करने में समय लगाएँ।
1. टेस्टिंग और CI
पहले रनटाइम रक्षा उपायों (VM Self Defending, VM Debug Protection, VM Domain Lock) को खारिज करें: विफलता को ऐसे टेस्टिंग बिल्ड से दोहराएँ जो टेस्टिंग और CI के ओवरराइड इस्तेमाल करता हो। अगर टेस्टिंग बिल्ड काम करता है, तो रक्षा उपाय आपके कोड को तोड़ने के बजाय आपके टूल्स या परिवेश पर प्रतिक्रिया दे रहे हैं।
2. रनटाइम संगतता
जाँचें कि target, बिल्ड पाइपलाइन और परिवेश से जुड़ी कोई भी घोषणा उस जगह से मेल खाती हो जहाँ कोड वास्तव में चलता है।
VM सुरक्षा योग्य फ़ंक्शन्स पर लागू होती है। root मोड में vmWrapTopLevelInitializers योग्य इनिशियलाइज़र्स को भी वर्चुअलाइज़ेशन के लिए रैप कर सकता है; मौजूदा VM प्रीसेट इसे चालू करते हैं। VMNoFunctionsToVirtualize जैसी कवरेज चेतावनियों की समीक्षा करें, और संवेदनशील फ़ंक्शन्स को स्पष्ट रूप से चुनने के लिए comment मोड इस्तेमाल करें।
विफल मामले को सबसे छोटे फ़ंक्शन और कॉल साइट तक घटाएँ जो अब भी समस्या दोहराता हो। कौन-से फ़ंक्शन्स वर्चुअलाइज़ हों, इसे सीमित करने के लिए comment मोड इस्तेमाल करें।
अगर आप vmBytecodeArrayEncoding को vmBytecodeArrayEncodingKeyGetter के साथ इस्तेमाल करते हैं, तो गेटर को ठीक वही कुंजी लौटानी चाहिए जो बिल्ड के समय इस्तेमाल हुई थी, और ऑब्फ़स्केटेड कोड चलने के समय वह कुंजी पहले से सेट होनी चाहिए; वरना बाइटकोड डिकोड नहीं हो सकता।
रनटाइम संगतता · Bytecode Array Encoding कुंजी
3. बग रिपोर्ट भेजें
support@obfuscator.io पर ईमेल करें। आप नीचे दी गई जितनी ज़्यादा जानकारी शामिल करेंगे, हम उतनी जल्दी इसे ठीक कर पाएँगे:
- पूरा एरर स्टैक ट्रेस, ठीक वैसा ही जैसा कंसोल में दिखता है, अपने शब्दों में लिखा हुआ नहीं।
- JSON के रूप में ऑब्फ़स्केटर विकल्प। आपने जो पूरा options ऑब्जेक्ट इस्तेमाल किया, उसे कॉपी करें (या प्रीसेट का नाम और सभी ओवरराइड)। विकल्पों के बीच सूक्ष्म पारस्परिक प्रभाव आम हैं, इसलिए हमें ठीक-ठीक वही सेट चाहिए।
- बिल्ड चेतावनियाँ, अगर हों: हर चेतावनी का
type,messageऔरfunctionName। - ऑब्फ़स्केटर संस्करण, जो एडिटर के नीचे डैशबोर्ड के संस्करण सिलेक्टर में दिखता है। API और npm पैकेज बिल्ड के लिए, यह API के
resultयाchunk_endसंदेश काversionफ़ील्ड है। - परिवेश: ब्राउज़र और उसका संस्करण, Node.js संस्करण, OS, और रनटाइम की कोई भी असामान्य बात (एक्सटेंशन, पॉलीफ़िल, कस्टम बिल्ट-इन)।
- न्यूनतम पुनरुत्पादन: आदर्श रूप से सेक्शन 2 वाला वह एक फ़ंक्शन, और एरर पैदा करने के लिए ज़रूरी कॉल साइट।
- मूल (ऑब्फ़स्केशन से पहले का) सोर्स, जहाँ संभव हो। ऑब्फ़स्केटेड आउटपुट हमारे लिए भी अपारदर्शी है; इनपुट के बिना हमें अपने ही बाइटकोड की रिवर्स-इंजीनियरिंग करनी पड़ती है।
अगर सोर्स मालिकाना है, तो ईमेल में बता दें; साझा करने से पहले हम NDA पर हस्ताक्षर कर सकते हैं। टूटा हुआ बाइटकोड बनाने वाले इनपुट पैटर्न को देखे बिना हम VM बग का भरोसेमंद निदान नहीं कर सकते, इसलिए यह अतिरिक्त कदम उठाना सार्थक है।
