2011-10-27 16 views
35

अन्य प्रश्नों के समान, like this oneजावास्क्रिप्ट डिबगिंग: परिवर्तनीय मूल्य में परिवर्तन को तोड़ने का कोई तरीका है?

क्या किसी जावास्क्रिप्ट डीबगर में परिवर्तनीय मान के परिवर्तन को तोड़ने का कोई तरीका है? (जैसे आईई डेवलपर टूल्स, विजुअल स्टूडियो, या फायरबग?)

मुझे लगता है कि यह "घड़ी चर" जैसा कुछ है, लेकिन मैं कॉलस्टैक को देखने में सक्षम होना चाहता हूं और वास्तव में परिवर्तन में परिवर्तन होने पर इसे रोकना चाहता हूं।

कस्टम विकल्प के साथ मूल्य सेटिंग को ओवरराइड करने का एक वैकल्पिक दृष्टिकोण हो सकता है, और उसमें ब्रेकपॉइंट डाल सकता है, लेकिन दुर्भाग्य से यह आईई afaik के लिए काम नहीं करेगा।

अद्यतन ऐसा लगता है कि व्यवहार के इस प्रकार कम से कम अप्रबंधित कोड written in C++ तो मैं शायद सोचा था कि एक जावास्क्रिप्ट सी ++ (गूगल के वी 8) में लिखा इंजन ऐसी ही कुछ हो सकता है के लिए उपलब्ध है, लेकिन यह करने के लिए प्रकट नहीं होता है मैं क्या चाहता हूँ।

+0

थ्रेड को पूरी तरह से तोड़ने के लिए सरल तरीका है, यह कष्टप्रद हां में एक चेतावनी डालना है, लेकिन आप जो कुछ भी चाहते हैं, अपनी चर, एक स्ट्रिंग, जो भी वास्तव में आप सतर्क कर सकते हैं। और यदि आप फ़ायरबग की तरह कुछ उपयोग करते हैं और आपके पास अपने कोड में लॉग हैं तो आप अलर्ट के साथ अपने प्रोग्राम को आसानी से कदम उठा सकते हैं। – Ryan

+4

बात यह है कि, मुझे नहीं पता कि चर कहाँ बदल गया है। यह एक और फाइल (या कई में से एक) में हो सकता है। मैं अपने कोड को अलर्ट स्टेटमेंट्स के साथ कूड़े नहीं जा रहा हूं, यह जानने के प्रयास में कि यह कहां बदलता है। उस बिंदु पर मैं डीबगर के साथ लाइन लाइन के माध्यम से भी कदम उठा सकता हूं। हालांकि धन्यवाद। – user420667

उत्तर

16

तुम भी एक IDE जरूरत नहीं है - आप "Object.watch()" का उपयोग कर सकते हैं:

Object.Watch Tutorial

आप किसी भी एक डिबगर उपयोग करते हैं, मैं दृढ़ता से Firebug सलाह देते हैं। सभी अपने जावास्क्रिप्ट, HTML और सीएसएस के लिए की जरूरत है :-): क्रोम में इस पुस्तकालय के साथ सफलता

http://getfirebug.com/javascript

+4

+1 बी/सी मुझे लगता है कि यह काम करेगा। हालांकि, मुझे नहीं लगता कि यह बहुत सारे ब्राउज़र एटीएम के साथ संगत है, बी/सी यह गैर-मानक जावास्क्रिप्ट 1.8.6 है: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/watch – user420667

+0

हेवन ' टी इसे आज़माने में सक्षम नहीं है लेकिन ऊपर दिए गए लिंक सेटर/गेटर विधियों का उपयोग करने के लिए निर्दिष्ट एक बेहतर तरीका हो सकता है: https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters – GuruM

+8

हम हैं 2013 में और मैं अभी भी ब्राउज़र के लिए ऑब्जेक्ट.वच() ... –

9

मैं आ रही है और यह सभी प्रमुख ब्राउज़रों का समर्थन करने के लग रहा है।

https://gist.github.com/eligrey/384583

बस .js फ़ाइल में शामिल हैं, तो फोन:

yourObject.watch('someProperty', function() { 
    doWhatYouWant(); 
    debugger; 
    console.write('this too'); 
    alert('Object Changed'); //etc 
}); 
+0

यह अच्छा लग रहा है। http://stackoverflow.com/a/1848414/420667 भी। धन्यवाद। – user420667

+0

क्रोम का उपयोग कर मेरे लिए काम नहीं किया। मैं पहले जिस्ट जावास्क्रिप्ट चला गया। फिर मैंने 'घड़ी (myObject,' propertyName ', function() {console.log (' बदला! ');}) निष्पादित किया; '। भले ही संपत्ति मूल्य बदल रहा था, console.log संदेश कभी नहीं आया था। – Joncom

+0

जब आप घड़ी() कॉल करते हैं तो कंसोल में एक त्रुटि की जांच करें। लाइब्रेरी निश्चित रूप से काम करती है इसलिए मुझे लगता है कि या तो यह लोड नहीं हो रहा है या आपका कॉल सफल नहीं है। – rainabba

-2

मैं अगर मैं आपके सवाल का गलत समझा पता नहीं है। यदि आप क्रोम डेवलपर टूल्स में जेएस डीबगिंग सत्र में एक निश्चित मूल्य तक पहुंचने पर एक अभिव्यक्ति देखना और रोकना चाहते हैं, तो यह अपेक्षाकृत छोटा है।

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

n = i++;:

उदाहरण के लिए, मान लीजिए कि आप एक पाश है और आप इसके अंदर एक चर करने के लिए एक इकाई जोड़ रहे हैं और जब चर पाश में अभिव्यक्ति इस प्रकार दिखाई देगा 3. के बराबर निष्पादन को रोकने के लिए चाहते हैं

आपको उस रेखा पर अपना ब्रेकपॉइंट सेट करना होगा और देखने के लिए अभिव्यक्ति ("ब्रेकपॉइंट संपादित करें ..." द्वारा संकेत के बाद) n == 3 होगा। अपना कोड चलाते समय यह आपके चरम पर पहुंचने पर वहां रुक जाएगा।

आपको पता चलेगा कि आपकी स्थिति निर्धारित है क्योंकि आपका ब्रेकपॉइंट नीले रंग की जगह नारंगी हो जाता है।

+1

यदि आसन्न रेखा पर आपके पास n = i ++ था (तो अब आपके पास एक लूप है जहां मुझे दो बार वृद्धि हुई है) और आपने ब्रेकपॉइंट को आसन्न रेखा पर नहीं रखा है, तो क्या यह बंद हो जाएगा जब निकटवर्ती रेखा पर 3 चालू हो जाए? यदि नहीं तो यह वह नहीं करेगा जो मैं खोज रहा था। वैकल्पिक रूप से यदि n किसी ऑब्जेक्ट की प्रॉपर्टी थी और इसे कई स्थानों पर सेट किया जा सकता था, तो एन के एक सेटटर पर घड़ी डालने से सभी फाइलों में एन की सभी सेटिंग्स को कवर करने के लिए पर्याप्त होगा? – user420667

+0

उस सटीक उदाहरण की कोशिश नहीं की है, लेकिन मेरे ज्ञान के लिए मैं हां कहूंगा, "ब्रेकपॉइंट संपादित करें ..." में मूल्यांकन करने की अभिव्यक्ति के रूप में संवाद को लाइन में कोड के समान होने की आवश्यकता नहीं है जहां ब्रेकपॉइंट है उस पे रखा। इसे "var बराबर मूल्य" होने की आवश्यकता नहीं है; उदाहरण के लिए, आप 'i + j <= k * n' जैसे कुछ डाल सकते हैं। आप अभिव्यक्ति को अक्षम करने के लिए भी टिप्पणी कर सकते हैं। यह आपके कोड के अंदर 'if (n == 3) {dummy = true} 'डालने और' ब्रेमी 'लाइन में अपना ब्रेकपॉइंट डालने जैसा ही काम करता है, लेकिन इसे ब्रेकपॉइंट डायलॉग के" लिंबो "में रखता है। पुष्टि करने के लिए इसे स्वयं आज़माएं;) – Pere

+0

मेरा मानना ​​है कि ब्रेकपॉइंट हिट होने पर अभिव्यक्ति का मूल्यांकन किया जाता है। तो n = i ++ की दो पंक्तियों के उदाहरण में केवल उनमें से एक पर ब्रेकपॉइंट के साथ, n == 3 का आपका ब्रेकपॉइंट उस हिट पर नहीं पहुंच सकता है जिस पर आप ब्रेकपॉइंट डालते हैं और मेरा प्रारंभिक मान। – user420667