कोणीय जावास्क्रिप्ट कोड को डीबग कैसे करें


104

मैं कोणीय जावास्क्रिप्ट का उपयोग करके अवधारणा के प्रमाण पर काम कर रहा हूं।

विभिन्न ब्राउज़रों (फ़ायरफ़ॉक्स और क्रोम) में कोणीय जावास्क्रिप्ट कोड को कैसे डीबग करें?


13
uh angularjs आपके टेम्प्लेट कोड का एक हिस्सा लपेटता है और इसे गतिशील रूप से निष्पादित करता है ... त्रुटि का स्रोत हमेशा "angular.js" होता है, इस प्रकार त्रुटि का स्रोत खोजना लगभग असंभव है।
user3338098

जवाबों:


64

1. क्रोम

क्रोम में डीबग AngularJS के लिए आप AngularJS Batarang का उपयोग कर सकते हैं । (प्लगइन पर हाल की समीक्षाओं से ऐसा लगता है कि AngularJS Batarang अब बनाए नहीं रखा जा रहा है। क्रोम के विभिन्न संस्करणों में परीक्षण किया गया काम नहीं करता है)

यहाँ वर्णन और डेमो के लिए लिंक है:

कोणीय जेएस बतरंग का परिचय

यहां से क्रोम प्लगइन डाउनलोड करें: डीबग AngularJS के लिए क्रोम प्लगइन

आप इस लिंक को भी देख सकते हैं: एनजी-बुक: डीबगिंग एंगुलरजेएस

आप कोणीय डिबगिंग के लिए एनजी-निरीक्षण का भी उपयोग कर सकते हैं।

2. फ़ायरफ़ॉक्स

के लिए फ़ायरफ़ॉक्स की मदद से Firebug आप कोड डीबग कर सकते हैं।

इस फ़ायरफ़ॉक्स ऐड-ऑन का उपयोग करें: AngScope: फ़ायरफ़ॉक्स के लिए ऐड-ऑन (AngularJS टीम द्वारा आधिकारिक एक्सटेंशन नहीं)

3. डिबगिंग एंगुलरजेएस : लिंक की जांच करें: डीबगिंग एंगुलरजेएस


1
यह वास्तव में काम नहीं करता है शर्म की बात है। काश आदमी उस चीज़ को बनाए रखना शुरू कर देता, जो कि यह एक महान विचार है और इसमें बहुत क्षमता है
Tules

5
@AskQuestion लगता है कि बतरंग अब समर्थित नहीं है। इस उत्तर को हटा दिया जाना चाहिए
आकिल फर्नांडीस

कोणीय टीम (ज्यादातर @btford) अभी भी बतरंग का समर्थन करती है, लेकिन यह उनकी सूची में एक प्राथमिकता नहीं लगती है, क्योंकि वे अगले AngularJS 2.0 रिलीज पर सभी प्रमुख हैं। में देखो ng-inspectअगर Batarang आप सिर दर्द दे रहा है।
डेविक्स 16

यह मानते हुए कि बतरंग ठीक से काम कर रहा है, कंसोल में कोई अतिरिक्त संदर्भ कोणीय.जेएस त्रुटियों में नहीं जोड़ा जाता है और 'एंगुलरजेएस' टैब भी मदद नहीं करता है।
user3338098

1
@SazzadTusharKhan: ठीक है। यह कोशिश करें -> मैक संस्करण पर आपके पास एक डेवलपर मेनू ("विकसित करें") है, मैक पर यह मेनू वरीयताओं के माध्यम से दिखाया गया है> उन्नत> शो डेवलपमेंट मेनू, और वहां आप "स्टार्ट डिबगिंग जावास्क्रिप्ट" जैसे आइटम देख सकते हैं। आपके संदर्भ के लिए: youtube.com/watch?v=BUvsnDhFL2w
वैभव जैन

35

IMHO, सबसे निराशाजनक अनुभव एक दृश्य तत्व से संबंधित एक विशिष्ट दायरे के मूल्य को प्राप्त करने / स्थापित करने से आता है। मैंने न केवल अपने कोड में, बल्कि कोणीय.जेएस में भी बहुत सारे ब्रेकप्वाइंट किए, लेकिन कभी-कभी यह सबसे प्रभावी तरीका नहीं है। हालांकि नीचे दिए गए तरीके बहुत शक्तिशाली हैं, लेकिन निश्चित रूप से उन्हें बुरा अभ्यास माना जाता है यदि आप वास्तव में उत्पादन कोड में उपयोग करते हैं, तो उन्हें बुद्धिमानी से उपयोग करें!

एक विज़ुअल एलिमेंट से कंसोल में एक संदर्भ प्राप्त करें

कई गैर-IE ब्राउज़रों में, आप एक तत्व को राइट क्लिक करके और "इंस्पेक्ट एलिमेंट" पर क्लिक करके एक तत्व का चयन कर सकते हैं। वैकल्पिक रूप से आप Chrome में तत्वों टैब में किसी भी तत्व पर क्लिक कर सकते हैं, उदाहरण के लिए। नवीनतम चयनित तत्व $0कंसोल में चर में संग्रहीत किया जाएगा ।

एक तत्व से जुड़ा एक दायरा प्राप्त करें

इस बात पर निर्भर करता है कि क्या कोई ऐसा निर्देश मौजूद है जो एक अलग दायरा बनाता है, आप गुंजाइश को angular.element($0).scope()फिर से प्राप्त कर सकते हैं या angular.element($0).isolateScope()( $($0).scope()यदि $ सक्षम है तो उपयोग करें )। यह वही है जो आपको तब मिलता है जब आप बटरंग के नवीनतम संस्करण का उपयोग कर रहे हैं। यदि आप सीधे मूल्य बदल रहे हैं, तो scope.$digest()यूआई पर परिवर्तनों को प्रतिबिंबित करने के लिए उपयोग करना याद रखें ।

$ eval बुराई है

जरूरी नहीं कि डिबगिंग के लिए। scope.$eval(expression)बहुत आसान है, जब आप जल्दी से जांचना चाहते हैं कि किसी अभिव्यक्ति का अपेक्षित मूल्य है या नहीं।

गुंजाइश के लापता प्रोटोटाइप सदस्य

पूर्व scope.blaऔर बीच का अंतर scope.$eval('bla')प्रोटोटाइपिक रूप से विरासत में दिए गए मूल्यों पर विचार नहीं करता है। पूरी तस्वीर पाने के लिए नीचे दिए गए स्निपेट का उपयोग करें (आप सीधे मूल्य नहीं बदल सकते हैं, लेकिन आप $evalवैसे भी उपयोग कर सकते हैं !)

scopeCopy = function (scope) {
    var a = {}; 
    for (x in scope){ 
        if (scope.hasOwnProperty(x) && 
            x.substring(0,1) !== '$' && 
            x !== 'this') {
            a[x] = angular.copy(scope[x])
        }
    }
    return a
};

scopeEval = function (scope) {
    if (scope.$parent === null) {
        return hoho(scope)
    } else {
        return angular.extend({}, haha(scope.$parent), hoho(scope))
    }
};

इसके साथ प्रयोग करें scopeEval($($0).scope())

मेरा नियंत्रक कहाँ है?

कभी-कभी ngModelजब आप निर्देश लिख रहे होते हैं तो आप मूल्यों की निगरानी करना चाहते हैं। का प्रयोग करें $($0).controller('ngModel')और आप की जाँच करने के मिल जाएगा $formatters, $parsers, $modelValue, $viewValue $renderऔर सब कुछ।


13

वहाँ भी $ लॉग है कि आप उपयोग कर सकते हैं! यह आपके कंसोल का उपयोग इस तरह से करता है कि आप इसे काम करना चाहते हैं!

त्रुटि / चेतावनी / जानकारी दिखाने से आपका कंसोल आपको सामान्य रूप से दिखाता है!

इस का उपयोग करें> दस्तावेज़


लिंक टूट गया है।
मोनिका को बहाल करना - notmaynard

10

प्रश्न का उत्तर दिए जाने के बावजूद, यह गैर-निरीक्षक पर एक नज़र रखना दिलचस्प हो सकता है


मुझे AngularJS बतरंग उपयोगी नहीं लगता, एनजी-इंस्पेक्टर भले ही अच्छी तरह से काम करने लगता है।
मार्टिन विसेटीका

7

एनजी-इंस्पेक्टर की कोशिश करो। वेबसाइट http://ng-inspector.org/ से फ़ायरफ़ॉक्स के लिए ऐड-ऑन डाउनलोड करें । यह मेनू पर फ़ायरफ़ॉक्स ऐड पर उपलब्ध नहीं है।

http://ng-inspector.org/ - वेबसाइट

http://ng-inspector.org/ng-inspector.xpi - फ़ायरफ़ॉक्स ऐड-ऑन


7

दुर्भाग्य से अधिकांश ऐड-ऑन और ब्राउज़र एक्सटेंशन आपको केवल मान दिखा रहे हैं, लेकिन वे आपको गुंजाइश चर को संपादित करने या कोणीय कार्यों को चलाने की अनुमति नहीं देते हैं। यदि आप ब्राउज़र कंसोल (सभी ब्राउज़र में) में $ स्कोप वैरिएबल को बदलना चाहते हैं तो आप jquery का उपयोग कर सकते हैं। यदि आप AngularJS से पहले jQuery लोड करते हैं, तो angular.element को jQuery चयनकर्ता पारित किया जा सकता है। तो आप एक नियंत्रक के दायरे का निरीक्षण कर सकते हैं

angular.element('[ng-controller="name of your controller"]').scope()

उदाहरण: आपको $ स्कोप वैरिएबल का मान बदलने और ब्राउज़र में परिणाम देखने की जरूरत है, फिर ब्राउज़र कंसोल में टाइप करें:

angular.element('[ng-controller="mycontroller"]').scope().var1 = "New Value";
angular.element('[ng-controller="mycontroller"]').scope().$apply();

आप अपने ब्राउज़र में परिवर्तन तुरंत देख सकते हैं। जिस कारण से हमने $ लागू का उपयोग किया है () है: बाहरी कोणीय संदर्भ से अपडेट किया गया कोई भी स्कोप वैरिएबल इसे अपडेट नहीं करेगा, यह आपको स्कोप के मानों को अपडेट करने के बाद डाइजेस्ट साइकिल चलाने की आवश्यकता है scope.$apply()

$ स्कोप वैरिएबल मान देखने के लिए, आपको बस उस वैरिएबल को कॉल करना होगा।

उदाहरण: आप क्रोम या फ़ायरफ़ॉक्स में वेब कंसोल में $ गुंजाइश का मूल्य देखना चाहते हैं:

angular.element('[ng-controller="mycontroller"]').scope().var1;

परिणाम तुरंत कंसोल में दिखाया जाएगा।


5

debuggerजहाँ आप इसका उपयोग करने का इरादा रखते हैं, वहां कॉल जोड़ें ।

someFunction(){
  debugger;
}

consoleअपने ब्राउज़र के वेब डेवलपर टूल के टैब में, जारी करेंangular.reloadWithDebugInfo();

उस पृष्ठ पर जाएँ या पुनः लोड करें जिसे आप डीबग करने का इरादा रखते हैं और अपने ब्राउज़र में डिबगर दिखाई देते हैं।


यह वास्तव में किसी कारण से घटकों के अंदर काम नहीं करता है। कंसोल घटक को बनाए जाने वाले बिंदु पर ब्रेक पॉइंट का पता लगाने के लिए लगता है, लेकिन उस कोड को प्रदर्शित नहीं करेगा जो वास्तव में निष्पादित हो रहा है। कम से कम मेरे लिए नहीं। हालाँकि आप उन चरों का मान देख सकते हैं जो गुंजाइश हैं। यदि किसी को पता है कि सलाह के माध्यम से आगे बढ़ने वाले वास्तविक कोड को प्रदर्शित करने के लिए डिबगर कैसे प्राप्त किया जाता है, तो उसकी सराहना की जाएगी।
user1023110

3
var rootEle = document.querySelector("html");
var ele = angular.element(rootEle); 

गुंजाइश () हम तत्व से (या उसके माता-पिता) तत्व पर गुंजाइश () विधि का उपयोग करके $ गुंजाइश प्राप्त कर सकते हैं:

var scope = ele.scope();

इंजेक्टर ()

var injector = ele.injector();

इस इंजेक्टर के साथ, फिर हम अपने ऐप के अंदर किसी भी कोणीय वस्तु, जैसे कि सेवाओं, अन्य नियंत्रकों, या किसी अन्य ऑब्जेक्ट को इंस्टेंट कर सकते हैं


धन्यवाद। मुझे जिस चीज की जरूरत थी!
marlar

2

आप अपने कोड में 'डीबगर' जोड़ सकते हैं और ऐप को फिर से लोड कर सकते हैं, जो वहां ब्रेकपॉइंट डालता है और आप 'स्टेप ओवर', या रन कर सकते हैं।

var service = {
user_id: null,
getCurrentUser: function() {
  debugger; // Set the debugger inside 
            // this function
  return service.user_id;
}

2

आप डेवलपर टूल में निर्मित ब्राउज़रों का उपयोग करके डीबग कर सकते हैं।

  1. ब्राउज़र में डेवलपर टूल खोलें और स्रोत टैब पर जाएं।

  2. वह फ़ाइल खोलें जिसे आप Ctrl + P और खोज फ़ाइल नाम का उपयोग करके डीबग करना चाहते हैं

  3. कोड के बाईं ओर क्लिक कर एक पंक्ति ny पर ब्रेक पॉइंट जोड़ें।

  4. पृष्ठ ताज़ा करें।

डिबगिंग के लिए बहुत सारे प्लगइन उपलब्ध हैं जिन्हें आप क्रोम प्लगइन डीबग कोणीय अनुप्रयोग "क्रोम के लिए डीबगर" का उपयोग करके संदर्भित कर सकते हैं


1

विजुअल स्टूडियो कोड (विजुअल स्टूडियो नहीं) के लिए Ctrl+ Shift+P

खोज बार में Chrome के लिए डीबगर टाइप करें, इसे इंस्टॉल करें और इसे सक्षम करें।

अपनी launch.jsonफ़ाइल में यह कॉन्‍फ़िगर जोड़ें:

{
    "version": "0.1.0",
    "configurations": [
        {
            "name": "Launch localhost with sourcemaps",
            "type": "chrome",
            "request": "launch",
            "url": "http://localhost/mypage.html",
            "webRoot": "${workspaceRoot}/app/files",
            "sourceMaps": true
        },
        {
            "name": "Launch index.html (without sourcemaps)",
            "type": "chrome",
            "request": "launch",
            "file": "${workspaceRoot}/index.html"
        },
    ]
}

इसे संलग्न करने के लिए आपको Chrome को दूरस्थ डिबगिंग के साथ लॉन्च करना चाहिए ताकि एक्सटेंशन संलग्न हो सके।

  • खिड़कियाँ

Chrome शॉर्टकट पर राइट-क्लिक करें, और गुणों का चयन करें "लक्ष्य" फ़ील्ड में, append --remote-debugging-port = 9222 या कमांड प्रॉम्प्ट में, /chrome.exe --remote-debugging-port = 9222 निष्पादित करें

  • ओएस एक्स

किसी टर्मिनल में, निष्पादित / आवेदन / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --remote-debugging-port = 9222

  • लिनक्स

एक टर्मिनल में, Google-chrome --remote-debugging-port = 9222 लॉन्च करें

अधिक जानकारी प्राप्त करें ===>


0

चूंकि ऐड-ऑन अब काम नहीं करते हैं, इसलिए मैंने पाया उपकरण का सबसे सहायक सेट विजुअल स्टूडियो / IE का उपयोग कर रहा है क्योंकि आप अपने JS में ब्रेकप्वाइंट सेट कर सकते हैं और अपने डेटा का निरीक्षण कर सकते हैं। बेशक क्रोम और फ़ायरफ़ॉक्स में सामान्य रूप से बहुत बेहतर देव उपकरण हैं। इसके अलावा, अच्छा ol 'कंसोल.लॉग () सुपर सहायक रहा है!


0

हो सकता है कि आप कोणीय 2 और इसके बाद के अनुप्रयोगों को डीबग करने के लिए Angular Augury A Google Chrome देव टूल एक्सटेंशन का उपयोग कर सकते हैं ।

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