সমস্ত জাভাস্ক্রিপ্ট অনিচ্ছাকৃত ব্যতিক্রম ধরা


112

আমি একটি অ্যাপ্লিকেশনটিতে থাকা সমস্ত অনাহীন জাভাস্ক্রিপ্ট ব্যতিক্রম একটি সতর্কতা বাক্সে প্রদর্শন করার উপায় খুঁজে বের করার বা এটি বের করার চেষ্টা করছি। আমি চাই যে কোনও সার্ভার সাইড কোড ব্যবহার না করে ক্লায়েন্টের পক্ষে এই সমস্ত করা হোক। আমি এমভিসি 3 কে একটি পরিবেশ হিসাবে ব্যবহার করছি।

আমি গত কয়েক দিন ধরে গবেষণা করছি এবং আমি যা খুঁজছি ঠিক তা পাইনি।

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

http://eriwen.com/javascript/js-stack-trace/

পূর্ববর্তী লিঙ্কের অনুরূপ কিছু:

https://github.com/eriwen/javascript-stacktrace

উপরের ২ য় লিঙ্কের মূল কোডটি এখানে নির্দিষ্ট জাভাস্ক্রিপ্ট ফাংশনের স্ট্যাক ট্রেস প্রিন্ট করেছে:

instrumentFunction: function (context, functionName, callback) {
    context = context || window;
    var original = context[functionName];
    context[functionName] = function instrumented() {
        callback.call(this, printStackTrace().slice(4));
        return context[functionName]._instrumented.apply(this, arguments);
    };
    context[functionName]._instrumented = original;
}

function printStackTrace(options) {
    options = options || {
        guess: true
    };
    var ex = options.e || null,
        guess = !! options.guess;
    var p = new printStackTrace.implementation(),
        result = p.run(ex);
    return (guess) ? p.guessAnonymousFunctions(result) : result;
}

সুতরাং, সংক্ষেপে বলা যায়, সমস্ত জাভাস্ক্রিপ্ট অনাহীন ব্যতিক্রমগুলি শোনার জন্য কোনও ধরণের 'শ্রোতা' রাখার এবং তারপরে একটি সতর্কতা বাক্সে পর্দায় মুদ্রণের কোনও উপায় আপনি কী জানেন?

ধন্যবাদ! জেসন


একটা জিনিস ... আপনি একটি সতর্কতা বাক্স ব্যবহার করবেন?!? আপনাকে console.log (ERROR_MESSAGE) ব্যবহার করতে পারে ....
Mathlight

1
আমি মনে করি এই প্রশ্নটি জেএস এর সমস্ত ত্রুটিগুলি আপনাকে সাহায্য করবে
পিলগারস্টোরফার ফ্রাঞ্জ

: আপনি সম্ভবত এই প্রশ্নের কটাক্ষপাত থাকা উচিত stackoverflow.com/questions/205688/...
মার্ক

উত্তর:


129

আপনি উইন্ডো.অনরার পদ্ধতি ব্যবহার করে এটি করতে পারেন।

window.onerror = function myErrorHandler(errorMsg, url, lineNumber) {
    alert("Error occured: " + errorMsg);//or any message
    return false;
}

13
আমার সম্পূর্ণ অ্যাপ্লিকেশনটিকে চেষ্টা / ধরা ব্লকে মোড়ানোর চেষ্টা করার চেয়ে অনেক ভাল। :) ধন্যবাদ!
অ্যান্থনি 21

15
কেবল একটি মাথা আপ: "নোট করুন যে কয়েকটি / অনেকগুলি ত্রুটি ইভেন্টগুলি উইন্ডো.অনরারকে ট্রিগার করে না, আপনাকে তাদের বিশেষভাবে শুনতে হবে" " - বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

6
সেই কোডটিতে ফাংশনটির নাম (মাইআররহ্যান্ডলার) অন্তর্ভুক্ত করার দরকার নেই ... কেবলমাত্র ফাংশন হতে পারে (ত্রুটিএমএসজি, ইউআরএল, লাইন নম্বর)
জোয়েলফ্যান

18
@ জোয়েলফ্যান ডিবাগিংয়ের উদ্দেশ্যে ফাংশনটির নাম রাখা ভাল। ডিবাগার বেনামে ফাংশন হিসাবে দেখানোর পরিবর্তে ফাংশনটির নাম ব্যবহার করবে।
জেরিনা

এটি দুর্দান্ত এবং ধন্যবাদ! মোবাইল সাফাই যেখানে এলোমেলোভাবে ব্যর্থ হয়, এবং যেখানে কী ঘটেছিল তা দেখার জন্য কোনও "কনসোল" বা "বিকাশকারী" উইন্ডো না থাকলে একটি জটিল ফটো-জুমিং স্ক্রিপ্টটি ডিবাগ করার চেষ্টা করা হয়েছে যা সময়ের 100% কাজ করে। অবশ্যই আমার নিজের একটি "ডিবাগ" উইন্ডো আছে যা আমি একটি গোপন বোতামটি দিয়ে চালু করতে পারি, তবে বিশ্বব্যাপী আমি চেষ্টা করেছি / ধরার চেষ্টা না করে প্রতিটি ত্রুটি দেখার উপায় ছিল না। এই সংযোজনটি আমাকে সমস্যাটি হুবহু দেখিয়েছিল এবং আমার চুল ছিঁড়ে যাওয়া আরও ছাড়িয়েছিল! আমি যদি এইবার দুবার ভোট দিতে পারি!
র্যান্ডি

48

আপনি হয় ব্যবহার করতে পারেন window.onerror, বা (আশ্চর্যজনক!) সঠিকভাবে 'ত্রুটি' ইভেন্টের সাথে আবদ্ধ করতে পারেন:

window.onerror = function (message, file, line, col, error) {
   alert("Error occurred: " + error.message);
   return false;
};
window.addEventListener("error", function (e) {
   alert("Error occurred: " + e.error.message);
   return false;
})

আপনি যদি জাভাস্ক্রিপ্ট ত্রুটিগুলি ট্র্যাক করতে চান তবে আপনি অ্যাটাসাস চেষ্টা করতে পারেন । আমি আতাতাসে কাজ করি।


7
আপনি কেন "মিথ্যা প্রত্যাবর্তন" বিবৃতি দিচ্ছেন?
কুমারসন_এসডে

@ কুমারসান_এসডি এটি ডিফল্ট ইভেন্ট হ্যান্ডলারটিকে আগুনের অনুমতি দেয়: বিকাশকারী.মোজিলা.আর
ডকস / ওয়েবে / এপিআই / গ্লোবাল ইভেন্টহ্যান্ডার্স /…

29

এ ছাড়াও

window.onerror = function (message, file, line, col, error) {
   alert("Error occurred: " + error.message);
   return false;
};
window.addEventListener("error", function (e) {
   alert("Error occurred: " + e.error.message);
   return false;
})

ইভেন্টের .then()জন্য শোনার প্রতিশ্রুতি কলব্যাকের ভিতরে থাকা সমস্ত ত্রুটিগুলিও ধরতে পারেনunhandledrejection

window.addEventListener('unhandledrejection', function (e) {
  alert("Error occurred: " + e.reason.message);
})

1
এটি উভয় ব্যবহার করা প্রয়োজন window.onerrorএবং window.addEventListener("error", বা তাদের মধ্যে একজন যথেষ্ট ব্যবহার করছেন?
টর্মোড হগেন

2
আপনি তাদের মধ্যে একটি ব্যবহার করতে পারেন। আপনি যদি ব্যবহার করেন তবে উপাদানগুলির ত্রুটিগুলি যে বুদ্বুদ হয় না তা ধরতে সেটটি window.addEventListener("error"প্রেরণ করুন । বিকাশকারী.মোজিলা.আর.ইন- useCapturetrue
জাভিয়ের পেরেজ

1
ধন্যবাদ!! errorঘটনা আমার বিশেষ ত্রুটি সংক্রামক হয় নি। unhandledrejectionপেয়েছি যদিও।
জো

throw new Error('tja');এই পদ্ধতির সাথে
সর্বশেষতম

1
@ জাভিয়ারপেরেজ আমি ভি 80 ব্যবহার করে পরীক্ষা করেছিলাম ইভেন্টটি সংযুক্ত করেছিলাম এবং সরাসরি ত্রুটি ছুঁড়ে ফেলেছিলাম পরে এবং এটি ধরা পড়েনি, বাক্য গঠন ত্রুটিও ধরেনি।
ওজজিআইইই

1

এটি লগ 4 জয়ের উপর ভিত্তি করে http://log4javascript.org দেখুন । যদি আপনার বেশিরভাগ কোড ব্যতিক্রমগুলি পরিচালনা করতে চেষ্টা / ক্যাপচার স্টেটমেন্টগুলিতে আবৃত থাকে তবে আপনি এই লাইব্রেরিকে সর্বদা উপলভ্য "ডায়ালগ বক্স" এ আউটপুট প্রেরণের জন্য আপনার সাধারণ ব্যবহারকারী দেখতে পেল এমন উইন্ডোটি লগিংয়ের জন্য একটি সাধারণ ইন্টারফেস হিসাবে ব্যবহার করতে পারেন। এমনকি আপনার একটি বাটন থাকতে পারে যা ডায়ালগ বাক্সের বিষয়বস্তু মুদ্রক বা পিডিএফে মুদ্রণের জন্য একটি উইন্ডো.প্রিন্ট () সম্পাদন করে। শুভকামনা।

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