2012-08-15 4 views
6

के लिए उपयोग किया जाता है मेरे पास एक जावास्क्रिप्ट एप्लिकेशन है जो टेक्स्टरेरा में कीबोर्ड ईवेंट कैप्चर करने पर निर्भर करता है। फायरबग (1.10.2) के साथ फ़ायरफ़ॉक्स (14.x) पर परीक्षण और डिबगिंग करते समय मैंने देखा कि जब मेरा ब्रेकपॉइंट सक्रिय होता है और डीबगर काम कर रहा है तो मेरा एप्लिकेशन अलग-अलग व्यवहार करता है।पता लगाएं कि फायरबग (या कोई अन्य वेब-डीबगर) कब डिबगिंग

मुझे पता है कि फायरबग का पता कैसे लगाया जाए लेकिन मुझे यह जानना है कि फ़ायरबग वास्तव में डिबगिंग के लिए उपयोग किया जाता है या नहीं (जावास्क्रिप्ट के साथ)?

संपादित करें:। यहाँ कुछ यादृच्छिक साइट

This site कैच किसी इनपुट बॉक्स में महत्वपूर्ण घटना पर एक उदाहरण है, चरित्र कोड बाहर प्रिंट और एक पाठ प्रतिनिधित्व के साथ दबाया कुंजी (यानी बदल देता है "में प्रवेश के लिए" कुंजी दर्ज करें) या एक अपरकेस (यदि एक पत्र)।

जब मैं इसे क्रोम से डीबग करता हूं और श्रोता समारोह पर ब्रेकपॉइंट डालता हूं, तो ब्रेकपॉइंट तक पहुंचने पर कुछ भी नहीं होता है (अपेक्षित के रूप में), जब मैं स्क्रिप्ट को फिर से शुरू करता हूं तो पाठ सामान्य के रूप में मुद्रित होता है।

जब मैं फ़ायरफ़ॉक्स पर फ़ायरबग के साथ इसे डीबग करता हूं: आइए हम कहें कि पहले मैंने "ई" अक्षर दबाया था और इनपुट बार में टेक्स्ट "ई" था। मैं ब्रेकपॉइंट चालू करता हूं और "z" दबाता हूं। फायरबग ब्रेकपॉइंट पर बंद हो जाता है लेकिन इनपुट बार में अब "ई" के बजाय टेक्स्ट "Ez" है। जब मैं स्क्रिप्ट को फिर से शुरू करता हूं, तो इस पाठ को "ज़ेड" के साथ प्रतिस्थापित किया जाता है।

मैंने एक और फ़ायरफ़ॉक्स डीबगर (वेंकमेन 0.9.8 9) की कोशिश की और वही हुआ। तो मेरा अनुमान है कि यह एक फ़ायरफ़ॉक्स समस्या है, डीबगर समस्या नहीं। तो प्रश्न अधिक सामान्य हो सकता है, क्या यह पता लगाया जा सकता है कि जावास्क्रिप्ट कोड कब डिबग किया जा रहा है?

+13

यह एक * बहुत * विषम आवश्यकता है।आपका आवेदन अलग-अलग व्यवहार कैसे कर रहा है? शायद आपको इसके आसपास काम करने की कोशिश करने के बजाय अपने आवेदन के व्यवहार को संबोधित करना और ठीक करना चाहिए - डीबग होने पर आमतौर पर अलग-अलग व्यवहार नहीं करना चाहिए, और शायद इसके पीछे एक वास्तुशिल्प समस्या है। और वहां कई अन्य डिबगर्स के बारे में क्या? आपको उन्हें सभी का पता लगाना होगा ... –

+0

क्या फ़ायरबग काम कर रहा है, भले ही आपके पास कोई ब्रेकपॉइंट न हो या गैर-फ़ायरबग रनों से अन्य अंतर न हों? –

+0

मैं घटना को कैप्चर कर रहा हूं, इसे संसाधित कर रहा हूं और इसे रोक रहा हूं। काम करने वाली विधि को डीबग करते समय, मेरी विधि को कॉल करने से पहले घटना वास्तव में होती है, इसलिए मैं इसे रोकने में असमर्थ हूं। चूंकि फ़ायरबग बंद होने पर मेरा एप्लिकेशन काम करता है, मुझे लगता है कि यह व्यवहार फ़ायरफ़ॉक्स समस्या नहीं था। एक और डीबगर ढूंढना मेरे लिए नहीं हुआ, विचार के लिए धन्यवाद! इसके अलावा, जबकि फायरबग चालू है लेकिन डिबगिंग नहीं है, सब कुछ ठीक काम कर रहा है। – Bikush

उत्तर

2

यह है कि मैं क्या Firebug पता लगाने के लिए करना है:

if (window.console && (window.console.firebug || window.console.exception)) { 
    // At this point, Firebug is enabled 
} 

पहला परीक्षण सुनिश्चित करें कि सांत्वना वास्तव में एक दूसरे के Firebug के लिए परीक्षण किया जाएगा मौजूद है बनाने के लिए महत्वपूर्ण है, हालांकि यह सिर्फ के पुराने संस्करणों के लिए काम करेंगे यह। तीसरा एक है क्योंकि फायरबग "अपवाद" जोड़ता है क्योंकि ऐसा इसलिए है क्योंकि संपत्ति "अपवाद" फायरबग की प्लगइन द्वारा जोड़ा जाता है।

(असंबंधित लेकिन रुचि:। window.console.exception Firebug द्वारा प्रयोग किया जाता कंसोल पर एक संदेश प्रदर्शित करने के लिए विधि है उदाहरण के लिए, टाइप करें:

>>> window.console.exception("A message", {param:'Value'}) 

आपको एक त्रुटि देखेंगे कि एक डंप के साथ, बहुत परिचित लगेगा

मर्क पारित कर दिया वस्तु का!।

+0

जैसा कि मैंने अपने प्रश्न में उल्लेख किया है, मुझे इस चेक के बारे में पता है। किसी भी तरह धन्यवाद! चूंकि फायरबग डेवलपर्स ने window.console से फ़ायरबग ऑब्जेक्ट को हटा दिया है, इसलिए किसी को इसके साथ समस्या होगी और यह उत्तर उपयोगी हो सकता है। – Bikush

+0

मुझे आपके प्रश्न में 'window.console.exception' और' window.console.firebug' का संदर्भ नहीं दिखाई देता है! लेकिन, मैं अंधेरा हो सकता है। अगर आपको लगता है कि यह सवाल का जवाब देता है तो कृपया मेरा जवाब स्वीकार करें! – Merc

+0

मेरा सवाल था कि वास्तविक डिबगिंग प्रक्रिया का पता लगाने के लिए, फ़ायरबग की उपस्थिति नहीं। – Bikush

0

खैर, उम्मीद है। यह उत्तर कोई मदद मिलेगी

Let समारोह हम करने के लिए डिबग हो जैसे:

function debugged() 
{ 
    debugger; 
} 
setTimeout(debugged, 3000); 

इस डिबग का पता लगाने कोड जोड़ है:

setTimeout(this.x = function(a){ s = Math.abs(new Date() - a.c - 1000); a.c = new Date(); setTimeout(a.foo,1000, a); if(s>100)console.log("debug") },1000, {c: new Date(), foo:this.x}) 

इसलिए यदि हम कुछ जगह और खुले डीबगर में इसे चलाने के लिए, यह ब्रेकप्वाइंट को गति प्रदान करेगा और डिबग घटना catched किया जाएगा (आप कर सकते हैं कंसोल में दिखाई देने वाले "डीबग" शब्द से इसे देखें)। यह एक अवधारणा है, आप पहचान अवधि का समय और डीबग ध्वज बढ़ाने का एक तरीका बदल सकते हैं। सिंगल थ्रेडेड जावास्क्रिप्ट के लिए धन्यवाद।

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