কৌণিক জাভাস্ক্রিপ্ট কোডটি কীভাবে ডিবাগ করা যায়


104

আমি কৌনিক জাভাস্ক্রিপ্ট ব্যবহার করে ধারণার প্রমাণ নিয়ে কাজ করছি।

বিভিন্ন ব্রাউজারে (ফায়ারফক্স এবং ক্রোম) অ্যাংুলার জাভাস্ক্রিপ্ট কোড কীভাবে ডিবাগ করবেন?


13
অহ কৌণিকগুলি আপনার টেম্পলেট কোডটি প্রচুর পরিমাণে আবৃত করে এবং এটি কার্যকর করে চালায় ... ত্রুটির উত্স সর্বদা "কৌণিক.জেএস" হয় সুতরাং ত্রুটির উত্স খুঁজে পাওয়া প্রায় অসম্ভব।
ব্যবহারকারী 3338098

উত্তর:


64

1. ক্রোম

ক্রোমে ডিবাগ অ্যাঙ্গুলারজেএস-এর জন্য আপনি AngularJS বাটারং ব্যবহার করতে পারেন । (প্লাগইনে সাম্প্রতিক পর্যালোচনাগুলি থেকে দেখে মনে হচ্ছে অ্যাঙ্গুলার জেএস বাটারং আর রক্ষণাবেক্ষণ করা হচ্ছে না ch ক্রোমের বিভিন্ন সংস্করণে পরীক্ষিত কাজ করে না)

বিবরণ এবং ডেমো জন্য লিঙ্ক এখানে:

কৌণিক জেএস বাটারং পরিচয়

এখান থেকে ক্রোম প্লাগইন ডাউনলোড করুন: ডিবাগ অ্যাঙ্গুলারজেএস-এর জন্য ক্রোম প্লাগইন

আপনি এই লিঙ্কটি উল্লেখ করতে পারেন: এনজি-বই: ডিবাগিং অ্যাঙ্গুলারজেএস

আপনি কৌণিক ডিবাগিংয়ের জন্য এনজি-পরিদর্শনও ব্যবহার করতে পারেন।

2. ফায়ারফক্স

জন্য ফায়ারফক্স সাহায্যে ফায়ারবাগকে আপনি কোড ডিবাগ করতে পারেন।

এই ফায়ারফক্স অ্যাড- অনগুলিও ব্যবহার করুন: অ্যাংসকোপ: ফায়ারফক্সের জন্য অ্যাড-অনস ( অ্যাঙ্গুলারজেএস টিম দ্বারা অফিসিয়াল এক্সটেনশন নয়)

৩. ডিবাগিং অ্যাঙ্গুলারজেএস : লিঙ্কটি পরীক্ষা করুন: ডিবাগিং অ্যাঙ্গুলারজেএস


1
লজ্জা এটা সত্যিই কাজ করে না। আমি আশা করি লোকটি জিনিসটি রক্ষণাবেক্ষণ শুরু করবে এটি একটি দুর্দান্ত ধারণা এবং এর প্রচুর সম্ভাবনা রয়েছে
টিউসগুলি

5
@ অ্যাসকুইয়েশন দেখে মনে হচ্ছে বাটারং আর সমর্থিত নয়। এই উত্তরটি সরানো উচিত
আকিল ফার্নান্দেস

কৌণিক দলটি (বেশিরভাগ @ বিটিফোর্ড) এখনও বাটারংকে সমর্থন করে তবে এটি তাদের তালিকার অগ্রাধিকার হিসাবে উপস্থিত হবে না, কারণ তারা পরবর্তী অ্যাঙ্গুলারজেএস ২.০ রিলিজের শীর্ষস্থানীয়। দেখব ng-inspectযদি Batarang আপনি মাথাব্যাথা প্রদান করা হয়।
demisx

ধরে নিই যে বাটারং সঠিকভাবে কাজ করছে, কনসোলটিতে কৌণিক.জেএস এর ত্রুটিগুলিতে কোনও অতিরিক্ত প্রসঙ্গ যুক্ত করা হবে না এবং 'অ্যাঙ্গুলারজেএস' ট্যাবটিও সহায়তা করে না।
ব্যবহারকারী 3338098

1
@ সাজ্জাদতুশার খান: ঠিক আছে। এটি চেষ্টা করুন -> ম্যাক সংস্করণে আপনার বিকাশকারী মেনু রয়েছে ("বিকাশ"), ম্যাকটিতে এই মেনুটি পছন্দসমূহ> উন্নত> প্রদর্শন বিকাশ মেনুতে প্রদর্শিত হবে এবং সেখানে আপনি "ডিবাগিং জাভাস্ক্রিপ্ট শুরু করুন" এর মতো আইটেম দেখতে পারবেন। আপনার রেফারেন্সের জন্য: youtube.com/watch?v=BUvsnDhFL2w
বৈভব জৈন

35

আইএমএইচও, ভিজ্যুয়াল উপাদান সম্পর্কিত কোনও নির্দিষ্ট সুযোগের মূল্য অর্জন / সেট করা থেকে সবচেয়ে হতাশাব্যঞ্জক অভিজ্ঞতা আসে। আমি কেবল নিজের কোডটিতেই নয়, নিজেই কৌণিক.জেজেও অনেকগুলি ব্রেকপয়েন্ট করেছি, তবে কখনও কখনও এটি সর্বাধিক কার্যকর উপায় হয় না। যদিও নীচের পদ্ধতিগুলি খুব শক্তিশালী, তবে আপনি যদি প্রকৃতপক্ষে প্রযোজনা কোড ব্যবহার করেন তবে অবশ্যই এগুলি বুদ্ধিমানের সাথে ব্যবহার করুন!

ভিজ্যুয়াল উপাদান থেকে কনসোলে একটি রেফারেন্স পান

অনেকগুলি নন-আইই ব্রাউজারে আপনি কোনও উপাদানকে ডান ক্লিক করে এবং "উপাদান পরিদর্শন করুন" ক্লিক করে একটি উপাদান নির্বাচন করতে পারেন। বিকল্প হিসাবে আপনি উদাহরণস্বরূপ Chrome এর এলিমেন্ট ট্যাবে যে কোনও উপাদানকে ক্লিক করতে পারেন। সর্বশেষ নির্বাচিত উপাদানটি $0কনসোলে ভেরিয়েবলে সংরক্ষণ করা হবে ।

একটি উপাদানের সাথে যুক্ত একটি সুযোগ পান

সেখানে কোনও নির্দেশনা রয়েছে যা কিনা বিচ্ছিন্ন সুযোগ তৈরি করে তার উপর নির্ভর করে আপনি স্কোপটি পুনরুদ্ধার করতে পারেন angular.element($0).scope()বা angular.element($0).isolateScope()( $($0).scope()enabled সক্ষম থাকলে ব্যবহার করুন )। আপনি যখন বাটারংয়ের সর্বশেষতম সংস্করণটি ব্যবহার করছেন তখন এটিই পাবেন। আপনি যদি সরাসরি মানটি scope.$digest()পরিবর্তন করে থাকেন তবে ইউআই-তে পরিবর্তনগুলি প্রতিবিম্বিত করতে ব্যবহার করতে ভুলবেন না।

al eval মন্দ

ডিবাগিংয়ের জন্য অগত্যা নয়। scope.$eval(expression)আপনি খুব সহজেই যখন আপনি এক্সপ্রেশনটির প্রত্যাশিত মান আছে কিনা তা দ্রুত পরীক্ষা করতে চান।

সুযোগের অনুপস্থিত প্রোটোটাইপ সদস্য

মধ্যে পার্থক্য scope.blaএবং scope.$eval('bla')সাবেক prototypically উত্তরাধিকারসূত্রে মান বিবেচনা না। পুরো ছবিটি পেতে নীচের স্নিপেটটি ব্যবহার করুন (আপনি সরাসরি মানটি পরিবর্তন করতে পারবেন না, তবে আপনি $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

প্রশ্নের উত্তর দেওয়া সত্ত্বেও, এনজি-ইন্সপেক্টরকে একবার দেখে নেওয়া আকর্ষণীয় হতে পারে


আমি কৌণিক জেএস বাটারংকে দরকারী মনে করি না, এনজি-ইন্সপেক্টর মনে হয় সুন্দরভাবে কাজ করছে।
মার্টিন ভ্যাসেটিকা

7

এনজি-ইন্সপেক্টর ব্যবহার করে দেখুন। ফায়ারফক্সের অ্যাড- অননটি http://ng-inspector.org/ ওয়েবসাইট থেকে ডাউনলোড করুন । এটি মেনুতে ফায়ারফক্স অ্যাডে পাওয়া যায় না।

http://ng-inspector.org/ - ওয়েবসাইট

http://ng-inspector.org/ng-inspector.xpi - ফায়ারফক্স অ্যাড-অন


7

দুর্ভাগ্যক্রমে বেশিরভাগ অ্যাড-অন এবং ব্রাউজার এক্সটেনশানগুলি আপনাকে কেবল মান দেখায় তবে তারা আপনাকে স্কোপ ভেরিয়েবলগুলি সম্পাদনা করতে বা কৌণিক কার্যগুলি চালিত করতে দেয় না। আপনি যদি ব্রাউজার কনসোলে (সমস্ত ব্রাউজারে) $ স্কোপ ভেরিয়েবলগুলি পরিবর্তন করতে চান তবে আপনি jquery ব্যবহার করতে পারেন। আপনি যদি AngularJS এর ​​আগে jQuery লোড করেন তবে কৌণিক.এলিমেন্টটি কোনও 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()

$ স্কোপ ভেরিয়েবল মান পর্যবেক্ষণের জন্য আপনাকে কেবল সেই ভেরিয়েবলটি কল করতে হবে।

উদাহরণ: আপনি Chrome বা ফায়ারফক্সে ওয়েব কনসোলে $ স্কোপ.ভয়ার ১ এর মান দেখতে চান কেবল টাইপ করুন:

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

ফলাফলটি তাত্ক্ষণিকভাবে কনসোলে প্রদর্শিত হবে।


5

আপনি debuggerযেখানে এটির কল্পনা করতে চান সেখানে কল যুক্ত করুন ।

someFunction(){
  debugger;
}

ইন consoleআপনার ব্রাউজারের ওয়েব ডেভেলপার টুলস ট্যাব, ইস্যুangular.reloadWithDebugInfo();

আপনি যে পৃষ্ঠাটি ডিবাগ করতে চান এবং সেটিকে পুনরায় লোড করুন এবং আপনার ব্রাউজারে ডিবাগারটি প্রদর্শিত হবে appear


এটি সত্যিকার অর্থে কোনও কারণে উপাদানগুলির অভ্যন্তরে কাজ করবে বলে মনে হয় না। কনসোলটি মনে হচ্ছে যে উপাদানটি তৈরি হয়েছে সেই বিন্দুতে ব্রেক পয়েন্টটি সনাক্ত করেছে, তবে কোডটি প্রদর্শন করবে না যা প্রকৃতপক্ষে কার্যকর হচ্ছে। কমপক্ষে আমার জন্য না। যদিও আপনি স্কেরেবলের ভেরিয়েবলের মান দেখতে পারবেন। যদি কেউ জানেন যে ডিবাগারটি কীভাবে পরামর্শের মাধ্যমে পদক্ষেপ নেওয়া হচ্ছে তা যে কোডটি প্রদর্শন করতে পারা যায় তা প্রশংসা হবে।
ব্যবহারকারী 1023110

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

সুযোগ () আমরা উপাদানটিতে স্কোপ () পদ্ধতি ব্যবহার করে উপাদান (বা এর পিতামাতার) থেকে $ সুযোগ আনতে পারি:

var scope = ele.scope();

প্রবেশক ()

var injector = ele.injector();

এই ইনজেক্টর দিয়ে আমরা তারপরে আমাদের অ্যাপ্লিকেশনের অভ্যন্তরের কোনও কৌণিক বস্তুর তত্ক্ষণাত পরিষেবা, অন্যান্য নিয়ন্ত্রক বা অন্য কোনও অবজেক্ট ইনস্ট্যান্ট করতে পারি


ধন্যবাদ। ঠিক যেটা আমার দরকার ছিল!
মার্লার

2

আপনি আপনার কোডে 'ডিবাগার' যুক্ত করতে পারেন এবং অ্যাপটি পুনরায় লোড করতে পারেন, যা সেখানে ব্রেকআপপয়েন্ট রেখে দেয় এবং আপনি 'স্টেপ ওভার' করতে পারেন, বা রান করতে পারেন।

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

2

আপনি বিকাশকারী সরঞ্জামগুলিতে নির্মিত ব্রাউজারগুলি ব্যবহার করে ডিবাগ করতে পারেন।

  1. ব্রাউজারে বিকাশকারী সরঞ্জাম খুলুন এবং উত্স ট্যাবে যান।

  2. আপনি কি সিটিআরএল + পি এবং অনুসন্ধান ফাইলের নাম ব্যবহার করে ডিবাগ করতে চান ফাইলটি খুলুন

  3. কোডের বাম দিকে ক্লিক করে একটি লাইনে ব্রেক পয়েন্ট যুক্ত করুন।

  4. পৃষ্ঠাটি রিফ্রেশ করুন.

ডিবাগিংয়ের জন্য প্রচুর প্লাগইন উপলব্ধ রয়েছে আপনি ক্রোম প্লাগইন ব্যবহারের জন্য উল্লেখ করতে পারেন ডিবাগ অ্যাঙ্গুলার অ্যাপ্লিকেশন "ক্রোমের জন্য ডিবাগার" প্লাগইন ব্যবহার করে


1

ভিসুয়াল স্টুডিও কোড (না ভিসুয়াল স্টুডিও) এর জন্য কি করতে Ctrl+ + Shift+ +P

অনুসন্ধান বারে ক্রোমের জন্য ডিবাগার টাইপ করুন, এটি ইনস্টল করুন এবং এটি সক্ষম করুন।

আপনার 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"
        },
    ]
}

এক্সটেনশনটি সংযুক্ত করার জন্য আপনাকে অবশ্যই ক্রোমকে দূরবর্তী ডিবাগিং সক্ষম করে চালু করতে হবে।

  • উইন্ডোজ

ক্রোম শর্টকাটটিতে ডান ক্লিক করুন, এবং বৈশিষ্ট্যগুলি নির্বাচন করুন "লক্ষ্য" ক্ষেত্রে, --remote-debugging-port = 9222 অথবা একটি কমান্ড প্রম্পটে, /chrome.exe --remote-debugging-port = 9222 চালান

  • ওএস এক্স

একটি টার্মিনালে, ক্রিয়াকলাপ / অ্যাপ্লিকেশন / গুগল app ক্রোম.এপ / কনটেন্টস / ম্যাকোস / গুগল - ক্রোম - রেমোট-ডিবাগিং-পোর্ট = 9222

  • লিনাক্স

একটি টার্মিনালে, গুগল-ক্রোম --remote-ডিবাগিং-পোর্ট = 9222 চালু করুন

আরও সন্ধান করুন ===>


0

অ্যাড-অনগুলি যেহেতু আর কাজ করে না, তাই আমি খুঁজে পেয়েছি এমন সরঞ্জামগুলির সর্বাধিক সহায়ক সেটটি ভিজ্যুয়াল স্টুডিও / আইই ব্যবহার করছে কারণ আপনি আপনার জেএসে ব্রেকপয়েন্টগুলি সেট করতে পারেন এবং সেভাবে আপনার ডেটা পরীক্ষা করতে পারেন। অবশ্যই ক্রোম এবং ফায়ারফক্সের আরও সাধারণ ডিভাইস রয়েছে। এছাড়াও, ভাল ওল 'কনসোল.লগ () অত্যন্ত সহায়ক হয়েছে!


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.