में किसी त्रुटि की स्टैक ट्रेस प्राप्त करना जब मुझे ExtendScript में कोई त्रुटि मिलती है, तो मैं इसके स्टैक ट्रेस को लॉग इन करने में सक्षम होना चाहता हूं। ऐसा प्रतीत होता है कि त्रुटियों में ExtendScript में स्टैक निशान शामिल नहीं हैं, इसलिए मैं त्रुटियों पर स्टैक निशान जोड़ने के विचार के साथ खेल रहा हूं।ExtendScript
स्टैक ट्रेस प्राप्त करने का एकमात्र तरीका मुझे $.stack
है। इस क्षेत्र में $.stack
में वर्तमान स्टैक ट्रेस शामिल है, जिस समय आप फ़ील्ड तक पहुंचते हैं।
मेरा पहला प्रयास अपनी खुद की त्रुटि ऑब्जेक्ट बनाना था जिसमें ढेर शामिल था। Error
ऑब्जेक्ट बहुत खास है जिसमें यह उस कोड की रेखा और फ़ाइल नाम प्राप्त कर सकता है जिसने इसे बनाया है। उदाहरण के लिए,
try {
throw new Error("Houston, we have a problem.");
}
catch (e) {
$.writeln("Line: " + e.line);
$.writeln("File: " + e.fileName);
$.writeln("Message: " + e.message);
}
प्रिंट होगा:
Line: 2
File: ~/Desktop/Source1.jsx
Message: Houston, we have a problem.
मैं इसे इस क्षमता के साथ अपने स्वयं वस्तु बनाने के लिए संभव है नहीं लगता। निकटतम मैं प्राप्त कर सकते हैं यह है:
function MyError(msg, file, line) {
this.message = msg;
this.fileName = file;
this.line = line;
this.stack = $.stack;
}
try {
throw new MyError("Houston, we have a problem.", $.fileName, $.line);
}
catch (e) {
$.writeln("Line: " + e.line);
$.writeln("File: " + e.fileName);
$.writeln("Message: " + e.message);
$.writeln("Stack: " + e.stack);
}
कौन सा प्रिंट:
Line: 9
File: ~/Desktop/Source2.jsx
Message: Houston, we have a problem.
Stack: [Source3.jsx]
MyError("Houston, we have a p"...,"~/Desktop/Source2.js"...,9)
यहाँ हम देख सकते हैं कि मैं अपने ही त्रुटि वस्तु बना रहा हूं और स्पष्ट रूप से यह लाइन और फ़ाइल नाम गुजर (MyError के बाद से अपने आप को समझ नहीं सकते हैं)। जब त्रुटि उत्पन्न होती है तो मैंने वर्तमान स्टैक भी शामिल किया है।
यह ठीक काम करता है जब मैं अपनी खुद की त्रुटि ऑब्जेक्ट कहता हूं, लेकिन यह तब काम नहीं करता है जब अन्य कोड नियमित त्रुटि ऑब्जेक्ट को कॉल करते हैं या जब कोई त्रुटि स्वचालित रूप से जेनरेट की जाती है (उदा। अवैध पहुंच से)। मैं किसी भी त्रुटि के स्टैक ट्रेस प्राप्त करने में सक्षम होना चाहता हूं, इससे कोई फर्क नहीं पड़ता कि यह कैसे उत्पन्न होता है।
अन्य दृष्टिकोण Error
के कन्स्ट्रक्टर को संशोधित करने के लिए हो सकते हैं, Error
प्रोटोटाइप को संशोधित करें, या Error
ऑब्जेक्ट को पूरी तरह से बदलें। मैं काम करने के लिए इन दृष्टिकोणों में से कोई भी प्राप्त करने में सक्षम नहीं हूं।
एक और विचार मेरे कोड की प्रत्येक विधि में एक कैच ब्लॉक डालना होगा और वर्तमान स्टैक को त्रुटि में जोड़ना होगा यदि उसके पास पहले से कोई नहीं है। यदि संभव हो तो मैं इस विकल्प से बचना चाहूंगा।
मैं विचारों से बाहर हूं। क्या त्रुटियों के ढेर का पता लगाने का कोई तरीका है?
यदि आपको कुछ काम मिल रहा है तो मुझे वास्तव में दिलचस्पी होगी। मेरी सबसे बड़ी समस्या जैसे ही मैं एक jsxbin प्रारूप में संकलित करता हूं, मुझे त्रुटियों से कुछ भी उपयोगी नहीं मिलता है। मैं लॉगिंग की अविश्वसनीय राशि का मार्ग चला गया हूं, इसलिए मैं उससे डीबग कर सकता हूं। –
व्यक्तिगत रूप से मैं $ .write या $ .writeln निर्देशों का उपयोग नहीं करता। सबसे पहले वे एक्स्टेंडस्क्रिप्ट टूलकिट अपफ्रंट लाएंगे यदि यर खोला नहीं गया है। अगर वास्तव में चेतावनी नहीं दी जाती है तो यह वास्तव में भ्रमित अंत उपयोगकर्ताओं को हो सकता है। इसके अलावा यह वास्तव में वास्तव में धीमी गति से धीमा हो सकता है। मैं डिस्क पर लॉग फाइल लिखना पसंद करता हूं। मेरे पास मेरा खुद का नुस्खा है लेकिन आप इस lib का लाभ उठा सकते हैं: http: //creative-scripts.com/logging-with-a-smile/ – Loic