2012-03-11 11 views
8

क्रोम और फ़ायरफ़ॉक्स के लिए कंसोल में Ctrl + C दबाए जाने के बराबर क्या है? विभिन्न एल्गोरिदम लागू करने के दौरान मैं अक्सर जावास्क्रिप्ट में कुछ छोटी गाड़ी (while) लूप लिखता हूं, जो बाहर नहीं निकलता है, ब्राउज़र को फ्रीज करता है। रीलोडिंग काम नहीं करती है, टैब बंद करने के लिए छोटे एक्स पर क्लिक करने से कुछ भी नहीं होता है, और थोड़ी देर में (शाब्दिक रूप से) मैं स्मृति से बाहर हूं, सिस्टम स्वैपिंग कर रहा है, और मैं कॉफी ब्रेक के लिए जा रहा हूं।आप ब्राउज़र में जेएस को कैसे बाधित करते हैं?

+0

ctrl + alt + del – user544262772

+3

मुझे यह मानना ​​है कि यह स्थिति को ठीक करने के लिए ब्राउज़र डेवलपर्स के लिए "प्रेरणा" के रूप में अधिक था। – skrat

+0

स्पष्ट रूप से मौजूदा जेएस निष्पादक बेवकूफ हैं कि वे कुछ इतना आसान नहीं कर सकते हैं। – Pacerier

उत्तर

5

की स्क्रिप्ट टैब में अपनी js कोड में ब्रेक अंक निर्धारित करने के लिए जावास्क्रिप्ट के लिए एक Ctrl + C के रूप में ऐसी कोई चीज नहीं है की अनुमति देता है। जावास्क्रिप्ट निष्पादित करने वाले ब्राउज़र आमतौर पर स्वयं की सुरक्षात्मक होते हैं। यदि कोई जावास्क्रिप्ट लटकता है, तो वे एक संवाद फेंक देंगे कि क्या उपयोगकर्ता जावास्क्रिप्ट को रोकना चाहता है।

टाइमआउट अवधि आमतौर पर ब्राउज़र की सेटिंग्स में पाई जा सकती है। आप यहां फ़ायरफ़ॉक्स के लिए यह कैसे कर सकते हैं: http://www.trixya.net/index.php/internet/how-to-set-javascript-timeout-in-firefox

+1

जब वे मेरा सिस्टम पहले ही स्वैप कर रहे हैं, तो वे उस संवाद को बहुत देर से फेंक देते हैं। – skrat

5

क्रोम में, आप Shift+ESC (या टाइटल बार पर राइट-क्लिक करें और क्रोम टास्क मैनेजर खोलें) हिट कर सकते हैं और लटका टैब से जुड़े प्रक्रिया को मार सकते हैं। यह उन मामलों में काम करेगा जहां टैब बंद करना नहीं होगा।

चेतावनी है, कभी-कभी क्रोम कई प्रक्रियाओं को एक प्रक्रिया में व्यवस्थित करेगा, और यह प्रक्रिया से जुड़े सभी टैब को मार देगा।

var maxIterations = 100000; 
while (foo) { 
    if (!maxIterations--) throw new Error('Max iterations hit, aborting.'); 
    // do stuff 
} 

में राइट क्लिक करें:


एक और दृष्टिकोण आप while ब्राउज़र फांसी छोरों से बचने के लिए ले जा सकते हैं (आप परीक्षण के बाद इसे बाहर ले जा सकते हैं) इस तरह कोड लिखने के लिए है क्रोम के कार्य प्रबंधक और एक अजीब ईस्टर अंडे प्रकट करने के लिए संदर्भ मेनू के नीचे आइटम का चयन करें।

+0

'जबकि (foo && --maxIterations) {...}' – vol7ron

+0

@ vol7ron मैंने अधिकतम कोड को शेष कोड से अलग लाइनों पर रखा है ताकि अगर –

+0

आवश्यक हो तो इसे आसानी से हटाया जा सकता है, मैं समझता हूं कि आप क्या हैं करते हुए। मेरे लिए, सब कुछ एक साथ बंद करने और रखने के लिए आसान होगा। ब्लॉक अलग होने पर अलग होने पर - आपको वास्तव में समय-समय पर पढ़ना होगा, केवल पूर्व-स्थितियों और शर्तों को देखने के बजाय – vol7ron

1

क्या थोड़ा अंतर्दृष्टि मैं काम कर रहा है, मैं कैसे आगे बढ़ना होगा की अपनी तरीकों में है से है:

  • केवल बटन क्लिक तरह की एक घटना पर स्क्रिप्ट को निष्पादित। यह रोका जा सके चालू स्क्रिप्ट onload
  • क्रोम आप डेवलपर उपकरण
0

ब्राउज़र में जावास्क्रिप्ट कोड चलाने के लिए कोई वास्तविक "इंटरप्टर" नहीं है। ईसीएमएस्क्रिप्ट को तथाकथित "यूआई थ्रेड" में निष्पादित किया जाता है, जिसका अर्थ है कि सभी प्रतिपादन सामग्री उसी कतार में होती है जो ईसीएमएस्क्रिप्ट कोड निष्पादित हो जाती है।

इसका मतलब है कि ईसीएमएस्क्रिप्ट में एक अनंत लूप स्वचालित रूप से पूरे ब्राउज़र इंटरैक्शन को लटकता है।

इससे बचने का एकमात्र तरीका स्पष्ट, साफ कोड लिखना है। यदि ऐसा होता है, तो अधिकांश ब्राउज़रों का एहसास होता है कि यूआई थ्रेड बहुत लंबे समय तक व्यस्त है और उपयोगकर्ता से पूछता है कि क्या वह चल रहे जावास्क्रिप्ट प्रक्रियाओं को रद्द करना चाहता है। यदि आप इसके लिए इंतजार नहीं करना चाहते हैं, तो आपकी एकमात्र पसंद संपूर्ण ब्राउज़र/टैब प्रक्रिया को मारना है।

हालांकि, अगर आप जानते हैं कि अपनी स्क्रिप्ट के कुछ हिस्से संभवतः अनंत लूप उत्पन्न करता है, आप या तो breakpoints मैन्युअल developer tools किसी प्रकार में सेट कर सकते हैं या आप अपनी स्क्रिप्ट में सीधे debugger; कीवर्ड सम्मिलित कर सकते हैं।इससे जावास्क्रिप्ट दुभाषिया वर्तमान लाइन पर रुकने का कारण बनता है और आपके पास अगले कोड का विश्लेषण करने का मौका होता है (उदाहरण के लिए स्थितियां) और खराब दिखने पर निष्पादन को रद्द कर दें।

+2

मैं कुछ भी नहीं कर सकता, '(1) {} 'लूप का प्रयास करें, और एक साफ निकास प्राप्त करने का प्रयास करें (बंद टैब, बंद विंडो, आदि) – skrat

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