2012-04-06 15 views
5

मैंने देखा है कि फ़ायरफ़ॉक्स/फ़ायरबग (मेरा मुख्य विकास पर्यावरण), कुछ त्रुटियों में स्टैक निशान उत्पन्न होते हैं, जबकि अन्य नहीं करते हैं। सबसे पहले मैंने सोचा कि क्या मुझे त्रुटि उत्पन्न हुई है (उदाहरण के लिए नई त्रुटि ("foo")) या जावास्क्रिप्ट ने इसे उत्पन्न किया है (उदाहरण के लिए। UndefinedFoo + = 1), लेकिन मैंने देखा है कि यह दोनों प्रकार के साथ हो रहा है त्रुटियों काफ़ायरफ़ॉक्स/फायरबग के साथ, आप केवल कुछ त्रुटियों के साथ स्टैकट्रैक क्यों प्राप्त करते हैं

तो, मेरा सवाल है, क्या किसी को पता है कि इसका क्या कारण है? क्या यह यादृच्छिक है या इसमें कुछ पैटर्न/तर्क है? क्या यह सिर्फ फ़ायरफ़ॉक्स और/या फ़ायरबग लंगड़ा है या अन्य ब्राउज़र भी ऐसा करते हैं? और सबसे महत्वपूर्ण बात यह है कि क्या मैं इसे नियंत्रित करने के लिए कुछ भी कर सकता हूं (विशेष रूप से इसे हमेशा मुझे स्टैक निशान देने के लिए)?

यह एक महत्वपूर्ण सवाल नहीं है (क्योंकि मैं हमेशा "कंसोल.ट्रैस()" फेंक सकता हूं, जो भी त्रुटि होती है), लेकिन अगर कोई जवाब जानता है तो मैं उत्सुक हूं।

********** संपादित **********

मैं इस सूत्र मिला: http://groups.google.com/group/firebug/browse_thread/thread/1f32df8b96ec1d30/64b9074cb99056c2?pli=1 जो कहा गया है कि फ़ायरफ़ॉक्स stacktraces अगर साथ Firebug प्रदान नहीं करता है त्रुटि त्रुटि का एक उदाहरण नहीं है। दूसरे शब्दों में, यदि आप ऐसा कुछ फेंकते हैं जो नई त्रुटि नहीं है ("foo"), तो आपको एक स्टैकट्रैक नहीं मिलेगा।

हालांकि, यह मेरी मदद नहीं करता है, क्योंकि जब मैं नई त्रुटि() को फेंकता हूं तब भी मुझे स्टैकट्रैक दिखाई नहीं दे रहा है।

+0

हालांकि मुझे संदेह है कि मुझे मायने रखता है, मुझे शायद यह उल्लेख करना चाहिए कि मैं लिनक्स पर हूं (इस मौके पर कि फ़ायरफ़ॉक्स में स्टैकट्रैक खोने के साथ लिनक्स-विशिष्ट बग है)। – machineghost

+0

क्या मैं अकेला हूं जो फ़ायरफ़ॉक्स में स्टैक-ट्रेस-कम त्रुटियों को देखता है? या दूसरों को उन्हें देखते हैं, और कोई भी नहीं जानता कि फ़ायरफ़ॉक्स ऐसा क्यों करता है? – machineghost

+1

मुझे आंशिक उत्तर मिला। यह पता चला है कि फायरबग में "गुप्त" (यानी: कॉन्फ़िगरेशन) प्राथमिकता है जो इसे स्टैकट्रैस नहीं दिखाती है: extension.firebug.showStackTrace। जब मैंने अपने बारे में जांच की: config, मैंने पाया कि यह वरीयता गलत पर सेट की गई थी (जो अजीब है, क्योंकि मुझे ऐसा कभी याद नहीं है ...)। हालांकि, यहां तक ​​कि इसके साथ भी सत्य (और फ़ायरफ़ॉक्स को पुनरारंभ करने के बाद भी) मुझे अभी भी कुछ त्रुटियों पर स्टैक निशान दिखाई नहीं दे रहे हैं :-( – machineghost

उत्तर

2

मुझे यह मिला! यह पता चला है कि मॉड्यूल पैटर्न समस्या है। यहाँ एक सरल उदाहरण है:

var OuterModule = (function(module){ 
    module.throwError = function() { 
     throw new Error("This has no stack trace!"); 
    }; 
    return module; 
})({}); 
OuterModule.throwError(); 

किसी कारण से, क्योंकि मॉड्यूल पैटर्न मॉड्यूल के दायरे के अंदर throwError समारोह छुपाता है, Firebug/फ़ायरफ़ॉक्स यह ठीक से पता लगाने में असमर्थ है।

वह आदमी जो हमेशा के लिए भी लिया जाता है; उम्मीद है कि किसी और को मेरी पीड़ा से फायदा होगा :-)

+0

एक साइड नोट के रूप में, यह स्पष्ट रूप से फ़ायरबग/फ़ायरफ़ॉक्स की अंतर्निहित सीमा नहीं है, क्योंकि अगर आप नई त्रुटि फेंकने से ठीक पहले "console.trace()" जोड़ते हैं, आपको एक पूरी तरह से उपयोग करने योग्य स्टैक ट्रेस मिलेगा। इसलिए समस्या यह नहीं है कि फ़ायरफ़ॉक्स स्टैक निशान को संभाल नहीं सकता है जो "मॉड्यूल" के अंदर से उत्पन्न होता है; समस्या यह है कि फ़ायरफ़ॉक्स को "मॉड्यूल" के अंदर होने वाली त्रुटियों के लिए उन स्टैक निशानों को जोड़ने में कठिनाई होती है। – machineghost

+0

मैंने इसी तरह के व्यवहार को देखा और यह भी महसूस किया कि यह त्रुटि के विपरीत ** नई त्रुटि ** के साथ फेंकने वाली एप्लिकेशन की त्रुटियों से संबंधित था सिस्टम द्वारा फेंक दिया - इस पोस्ट के लिए धन्यवाद! –

संबंधित मुद्दे