क्या Google Chrome में डीबगिंग के दौरान जावास्क्रिप्ट चर मानों को बदलना संभव है?


82

मैं एक जावास्क्रिप्ट ऐप (क्रोम देव टूल्स का उपयोग करके) डिबग कर रहा हूं, और मैं कोड के माध्यम से कदम बढ़ाते हुए कुछ चर मूल्यों को बदलना चाहूंगा।

क्या यह संभव है?

मैंने कोशिश की है और ऐसा कुछ मिला है:

> modeline
1
> modeline=0
0             <<< seems to work but... 
> modeline
1             <<< ups!!

लेकिन मैं किसी भी दस्तावेज को खोजने में असमर्थ हूं जो बताता है कि क्या किया जा सकता है या नहीं किया जा सकता है ...


कुछ कोड पोस्ट करें। कहाँ modelineसे आता है?
एमिल इवानोव

4
@ ईमिल: क्या यह महत्वपूर्ण है? मॉडलाइन एक वैश्विक चर है, मैंने भी इसी परिणाम के साथ window.modeline का उपयोग करके इसे संशोधित करने की कोशिश की है। लेकिन इस सवाल का भी स्थानीय चर के लिए प्रासंगिक है अंदर एक समारोह की घोषणा की
tato

4
मैं इस व्यवहार की पुष्टि कर सकता हूं। Chrome में JS ऑब्जेक्ट पर किसी संपत्ति को संशोधित करने से इंटरप्रेटर में ऑब्जेक्ट के वास्तविक मूल्य पर कोई प्रभाव नहीं पड़ता है। फ़ायरफ़ॉक्स में एक ही संशोधन js स्क्रिप्ट का मूल्यांकन अलग तरह से करता है जैसा कि आप उम्मीद करेंगे। Chrome पेरैप्स में किसी प्रकार की बाहरी सुरक्षा? क्या किसी को पता है कि क्या यह क्रोम में बदल सकता है, इसलिए आप इसे डीबगिंग जेएस के लिए उपयोग कर सकते हैं?
निकोलज हेंसन

1
इसके लिए एक बग रिपोर्ट दायर की ।
ग्रीनजाइंट

1
पहले से ही वी 8 में लागू: मुद्दा 2399 अब क्रोमियम के डेवलपर उपकरण अद्यतन करने की आवश्यकता: जारी करना 124,206
gabrielmaldi

जवाबों:


39

यह जवाब अभी तक क्यों मिल रहा है?

प्रति माइकल मेयर के जवाब , इस अब एक समस्या है, और मेरा उत्तर अप्रचलित है ( go()अब रिटर्न 30सांत्वना के साथ mucking के बाद)। यह जुलाई 2013 में तय किया गया था, गैब्रिएलमल्डी की टिप्पणी में ऊपर दी गई बग रिपोर्ट के अनुसार । यह मुझे सचेत करता है कि मैं अभी भी अपवित्र हो रहा हूं - मुझे लगता है कि अपवित्र या तो प्रश्न या मेरे उत्तर को नहीं समझता है।

मैं ऐतिहासिक कारणों के लिए यहाँ अपने मूल जवाब छोड़ देते हैं, लेकिन जाएगा वोट दें जाना माइकल के जवाब के बजाय


चाल यह है कि आप एक स्थानीय चर को सीधे नहीं बदल सकते हैं, लेकिन आप किसी वस्तु के गुणों को संशोधित कर सकते हैं। आप एक वैश्विक चर के मूल्य को भी संशोधित कर सकते हैं:

var g_n = 0;
function go()
{
    var n = 0;
    var o = { n: 0 };
    return g_n + n + o.n;  // breakpoint here
}

सांत्वना:

> g_n = 10
  10
> g_n
  10
> n = 10
  10
> n
  0
> o.n = 10
  10
> o.n
  10

go()ब्रेकपॉइंट सेट करने और कंसोल में उन कॉल को चलाने के बाद परिणाम देखें , और आप पाएंगे कि परिणाम 20 है, बजाय 0 (लेकिन दुख की बात है, 30 नहीं)।


2016/01/19 क्रोम नवीनतम, तुच्छ कोड (var a = 1; डिबगर; कंसोल.लॉग (a);) बग अभी भी मौजूद है ...
Offirmo

@ ऑफीर्मो - 1लॉग इन है। बग क्या है? आपको लॉग इन होने की क्या उम्मीद थी?
gilly3

डिबगर ओपन के साथ, a"स्कोप" पैनल में किसी भी चीज़ के मूल्य (उदा। 42) को फिर से शुरू करें: फिर से शुरू किया गया: 1 लॉग किया गया है
Offirmo

@ ऑफीर्मो - मेरे लिए नहीं: स्क्रीनशॉट । लेकिन, अगर मैं इसे किसी फ़ंक्शन में लपेटता हूं, तो मैं देखता हूं कि आप क्या वर्णन करते हैं। दिलचस्प है। लेकिन फिर, मैं इसे सीधे कंसोल में दर्ज करके मान बदल सकता हूं, (जो मैं गुंजाइश पैनल का उपयोग करने की तुलना में व्यक्तिगत रूप से आसान पाता हूं)। स्क्रीनशॉट मुझे लगता है कि मैंने कभी भी गुंजाइश पैनल में मूल्यों को बदलने की कोशिश नहीं की। मैं हमेशा कंसोल में उन भावों को निष्पादित करता हूं जो मूल्य को बदलते हैं, और यह काम करने लगता है कि कोई फर्क नहीं पड़ता।
gilly3

4
मैंने उत्थान किया क्योंकि आपका उत्तर "एक अच्छा उत्तर" के सभी मानदंडों को पूरा करता है और आप एक और उत्तर का उल्लेख करते हैं जो नए, बेहतर जानकारी प्रदान करता है, जो - एक स्वीकृत उत्तर से आता है - यह तुरंत विश्वसनीयता देता है। तो धन्यवाद। और upvotes का आनंद लें!
गुफलाम

67

यह अब क्रोम 35 (आज 11 जुलाई, 2014 तक) में संभव है। मैं नहीं जानता कि किस संस्करण ने इसे पहले अनुमति दी थी।

बस मेरी मशीन पर @ gilly3 उदाहरण का परीक्षण किया गया है और यह काम करता है।

  • कंसोल, Sourcesऔर टैब खोलें Snippets, एक नया स्निपेट जोड़ें, इसमें निम्न कोड पेस्ट करें:

    var g_n = 0; function go() { var n = 0; var o = { n: 0 }; return g_n + n + o.n; // breakpoint here }

  • स्निपेट नाम पर राइट-क्लिक करें, 'रन' पर क्लिक करें (हालांकि यह फ़ंक्शन को आग नहीं देता है)

  • रिटर्न स्टेटमेंट पर ब्रेकपॉइंट जोड़ें।
  • नीचे कंसोल में, टाइप करें go()
  • और नीचे प्रदर्शित चर मानों को बदल दें

स्थानीय संशोधन के साथ कार्य करने की अनुमति दी।

और लौटा परिणाम g_n + n + o.n30 है।


1
इस बग के प्रतिगमन को ब्रायन के उत्तर में दिए गए लिंक में ट्रैक किया गया है
माइक

7

यह क्रोम देव टूल्स में एक स्वीकृत बग है:

http://code.google.com/p/chromium/issues/detail?id=124206


ऐसा लगता है कि यह 21 मार्च, 2013 को तय किया गया था। मुझे यकीन नहीं है कि क्रोम के किस संस्करण में यह बताना होगा कि
डेविड

@ डेविड उन्होंने इसे ब्लिंक में तय किया, क्रोम बनाने के लिए हमें कुछ समय तक इंतजार करना पड़ सकता है जो ब्लिंक का उपयोग करता है
अंशुल

3
यह क्रोम संस्करण 49.0.2623.87 में (फिर से) टूट गया है। उपरोक्त लिंक में साइन इन करें और यदि आप इसके महत्व को बढ़ाना चाहते हैं तो इस मुद्दे को देखें।
माइक

6

हाँ! आखिरकार! मैंने इसे मैक पर केवल क्रोम, संस्करण 66.0.3359.170 (आधिकारिक बिल्ड) (64-बिट) के साथ आज़माया।

आप पहली तस्वीर के रूप में या दूसरी तस्वीर की तरह कंसोल के साथ मान बदल सकते हैं।

क्रोम डीबगर परिवर्तन मान

यहाँ छवि विवरण दर्ज करें


यह जटिल परिस्थितियों (जैसे अंतराल और ट्रिगर) के लिए भी काम करता है।
गेरफ्रीड

4

ऐसा लगता है कि नहीं।

ब्रेकपॉइंट लगाएं, जब यह कंसोल पर स्विच बंद कर देता है, तो चर को सेट करने का प्रयास करें। जब आप इसे एक अलग मूल्य प्रदान करते हैं तो यह त्रुटि नहीं करता है, लेकिन यदि आप इसे असाइनमेंट के बाद पढ़ते हैं, तो यह अनमॉडिफाइड है। : - /


ठीक है ... कम से कम आप वही व्यवहार देख रहे हैं जो मैं देख रहा हूं। लेकिन ... क्या यह संभव है?
ततो

4

फायरबग आपको ऐसा करने की अनुमति देता है।


3
और ऐसा IE और ओपेरा ड्रैगनफ़्लू करता है।
कीथ के

5
मुझे वास्तव में ओपेरा ड्रैगनफ्लाई -____-
ThorSummoner

2

वास्तव में वर्कअराउंड है। संपूर्ण विधि की प्रतिलिपि बनाएँ, इसका नाम संशोधित करें, जैसे मूलनाम () से मूलनाम (2) पर आप जो भी मान चाहते हैं उसे लेने के लिए अंदर चर को संशोधित करें, या इसे एक पैरामीटर के रूप में पास करें।

फिर यदि आप इस विधि को सीधे कंसोल से कहते हैं, तो इसमें समान कार्यक्षमता होगी लेकिन आप चर मानों को संशोधित करने में सक्षम होंगे।

यदि विधि को स्वचालित रूप से कहा जाता है तो इसके बजाय कंसोल में टाइप करें

originalName = null;
function originalName(original params..)
{
    alert("modified internals");
    add whatever original code you want
}

2

मैं कंसोल में असाइनमेंट द्वारा स्क्रिप्ट चर मान को संशोधित करने में सक्षम हूं। सबसे सरल लगता है।


1

मुझे नहीं पता कि क्रोम टीम इस मूर्खतापूर्ण विशेषता की अनुमति क्यों नहीं देती है ... लेकिन सफलता के साथ परिवर्तनशील मूल्यों को बदलने का एकमात्र तरीका है "क्रोम" टैब के तहत क्रोम संपादक में सीधे स्क्रिप्ट को संशोधित करना (यह व्यवहार को बदलता है) आपकी स्क्रिप्ट तब तक जब तक आप पृष्ठ को ताज़ा नहीं करते), लेकिन ताज़ा होने पर वह परिवर्तन खो जाएगा, इसलिए लापरवाह रहें।


0

मैं एक ही मुद्दा रहा था, 'Google Chrome के बारे में' -> सहायता पर गया और उसने कहा कि मुझे नवीनतम अपडेट प्राप्त करने के लिए अपने ब्राउज़र को पुनरारंभ करने की आवश्यकता है।

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

हालाँकि, मैंने कुछ विषमताओं को नोटिस किया था, क्योंकि मुझे दाहिने हाथ की खिड़की (स्कोप वैरिएबल्स) में पाठ को बदलने से पहले कुछ असंबंधित var असाइनमेंट पर कदम रखना था।


यदि आपने संपत्तियों को संग्रहीत करने के लिए स्थानीय भंडारण का उपयोग किया है, तो आप संसाधन-> LocalStorage पर भी जा सकते हैं और उन संपत्तियों को संपादित कर सकते हैं जिन्हें आपने सीधे वहाँ सहेजा है।
गाइल्सडामलटन

0

हर बार एक मूल्य को संशोधित करने के लिए कोड का एक ब्लॉक निष्पादन प्रवाह को तोड़ने के बिना चलता है :

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

एक पंक्ति संख्या पर राइट-क्लिक करें और "लॉगपॉइंट" चुनें, फिर असाइनमेंट अभिव्यक्ति दर्ज करें। यह कुछ इस तरह दिखता है:

यहाँ छवि विवरण दर्ज करें

मुझे लगता है कि यह एक राज्य के मूल्यों को स्थापित करने के लिए सुपर उपयोगी है अन्यथा पुन: पेश करने के लिए आसान नहीं है, इसमें मेरी परियोजना को डिबग लाइनों के साथ पुनर्निर्माण किए बिना। जब आप कर रहे हैं ब्रेकप्वाइंट को हटाने के लिए याद रखें!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.