কোনও সিস্টেমকে ক্রাশ হওয়া থেকে রক্ষা করার জন্য ব্যতিক্রমগুলি কি মূলত বিদ্যমান?


16

দ্বিতীয়ত, আমি ভাবছিলাম যে ব্যতিক্রমগুলি (ব্যতিক্রম নিয়ন্ত্রণ প্রবাহের রাজ্যে) এবং ব্যতিক্রমগুলির মধ্যে (যেমন জাভাতে ব্যবহৃত) মধ্যে পার্থক্য কী তা যদি কেউ জানত।

তবে তারা কি ব্যবহারকারী প্রোগ্রামটি বন্ধ করে সিস্টেমটিকে ক্র্যাশ হওয়ার হাত থেকে রক্ষা করতে পারে?

উত্তর:


29

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

ডিফল্টরূপে বলুন যে আমার প্রোগ্রামটি ডেটাবেস থেকে কী ফিরিয়ে নিয়েছে তার উপর ভিত্তি করে ডেটার একটি পৃষ্ঠা প্রদর্শন করে - ভাল ক্র্যাপ, আমার কোনও ডেটা নেই। কোনও বিশৃঙ্খল দৃষ্টিভঙ্গি উপস্থাপন করার বা সম্ভাব্য অবৈধ ক্রিয়াকলাপ চালিয়ে যাওয়ার পরিবর্তে আমি এই ব্যতিক্রমটি ধরতে পারি এবং স্থানীয় ডেটা থেকে পড়ে অন্য ডেটাবেসে ফিরে যেতে পারি, ব্যবহারকারীকে ডেটা চাইতে পারি নাহলে ব্যবহারকারী বা সিস্টেমকে নিরাপদ অবস্থায় ফিরিয়ে দিতে পারি (সম্ভবত একটি এটি অবিলম্বে একই ব্যতিক্রম ঘটায় না!)

সিস্টেমগুলির মধ্যে যেখানে ব্যবহারকারীদের ইনপুট কোনও সমস্যার কারণ / সমাধান হতে পারে, ব্যতিক্রমগুলি কোনও ব্যবহারকারীকে সমস্যা সম্পর্কে বিস্তারিত এবং সহায়ক তথ্য জানতে পারে। খুব সাধারণ "পরিবর্তে একটি নিয়ন্ত্রণহীন ব্যতিক্রম ঘটেছে ..." বা "এসকিউএল থেকে সরাসরি ভয় দেখানো ত্রুটি বার্তা" এর পরিবর্তে আপনি ব্যবহারকারীকে কিছু সহায়ক বা "রিসোর্স বিতে সংযুক্ত হতে পারেন নি" এর মতো অন্তত বোঝার মতো কিছু বলতে পারেন "


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

1
আমি ত্রুটি কোডগুলি সহ ঠিক একই জিনিসটি করতে পারি না? আপনি একটি ত্রুটি ফিরিয়ে দিন, এবং আমি এটি পরিচালনা করি।
mskw

16

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

ব্যতিক্রমগুলি সহ, ত্রুটিগুলি কেবলমাত্র সেই বিন্দুতে পরীক্ষা করা যায় যেখানে সেগুলি পরিচালনা করা যায়। বেশিরভাগ অ্যাপ্লিকেশন কোডটি স্ট্রেইট-লাইনের ফ্যাশনে লেখা যেতে পারে, যেহেতু ফাংশনগুলি হয় ব্যবহারযোগ্য মূল্য ফেরত দেয় বা একটি ব্যতিক্রম ছুঁড়ে দেয়।


5

একটি ব্যতিক্রমের বিষয়টি ব্যবহারকারীকে ব্যতিক্রমী পরিস্থিতিতে অবহিত করা উচিত। সিস্টেমে কিছু ভুল হয়ে থাকলে প্রোগ্রামটি সঠিকভাবে হ্যান্ডল করার অনুমতি দেওয়া উচিত।

এটি বলেছিল, না, সিস্টেমটিকে "ক্রাশ" হতে আটকাতে একটি ব্যতিক্রম উপস্থিত নেই। একটি ব্যতিক্রম এটি আমাকে জানাচ্ছে যে এখানে একটি সমস্যা রয়েছে। আমি কীভাবে এগিয়ে যাই তা নির্ধারণ করতে পারে যে সিস্টেমটি "ক্র্যাশ" হয়েছে কিনা।

এছাড়াও নোট করুন যে কোনও ব্যতিক্রমকে আপনি যেমন বলেছিলেন তেমন কোনও অ্যাপ্লিকেশন বন্ধ করতে হবে না। একটি ব্যতিক্রম প্রোগ্রামার দ্বারা পরিচালনা করা যেতে পারে এবং সংশোধন বা ব্যবহারকারীর কাছে কিছু অর্থপূর্ণ ত্রুটিতে রূপান্তরিত হতে পারে।


* পরীক্ষিত ব্যতিক্রম (যে ব্যতিক্রমগুলি ধরা পড়তে বাধ্য করা হয়) এর ব্যবহারটি কিছুটা ঘাড়ে দাগ। কিছু (সম্ভবত বেশিরভাগ) বিকাশকারীরা খুঁজে পেয়েছেন যে জোর করে ব্যতিক্রম হ্যান্ডলিং করা জটিল, বিনা শৃঙ্খলাবদ্ধ এবং কেবল খারাপ অভ্যাস।


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

জর্জেন, আমি বুঝতে এবং আপনার মন্তব্যে সম্পূর্ণরূপে একমত। "সংশোধন বা কিছু অর্থপূর্ণ ত্রুটিতে পরিণত হয়েছে" - আমি কি এই বক্তব্য দিয়ে সেই ভাবনাটি প্রকাশ করছি না?

হ্যাঁ এখন এটি অনেক ভাল।
জর্জেন স্ট্রোবল

তাত্ক্ষণিকভাবে, ব্যতিক্রম কখনও ব্যবহারকারীদের দেখানো উচিত নয় । (যে পরিস্থিতিগুলির ফলে তাদের উত্পন্ন হয়েছে সেগুলি কোনওভাবেই ব্যবহারকারীদের কাছে জানানো দরকার, তবে ব্যতিক্রম হিসাবে নয়)) তবে প্রোগ্রামটি কেবল একটি ডিআইএএফ বা সারপ্রাইজ প্রস্থান করার চেয়ে একটি ব্যতিক্রম সর্বদা ভাল। ("আমি যখনই প্রেরকের নাম অনুসারে আমার ইমেলটি বাছাই করার চেষ্টা করি তখনই ইমেল ক্লায়েন্ট নিঃশব্দে প্রস্থান করে!" যে প্রস্থানটি কতটা পরিষ্কার হোক না কেন, এটি এখনও ভুল))
ডোনাল ফেলো

2

ব্যতিক্রম ত্রুটি হ্যান্ডলার থেকে ত্রুটি অবস্থান ভাগ করে আধুনিক ত্রুটি পরিচালনার অনুমতি দেয়। কখনও কখনও এটি প্রবাহ নিয়ন্ত্রণের জন্যও ব্যবহৃত হয়।

আনহ্যান্ডেল ব্যতিক্রম একটি প্রোগ্রামকে সমাপ্ত করে। তবে এগুলি পূর্বের ব্যতিক্রমগুলির চেয়ে আলাদা নয়, কেবলমাত্র একটি অলস প্রোগ্রামার যারা প্রতিটি পথে সঠিক ত্রুটি হ্যান্ডলারগুলি অন্তর্ভুক্ত করতে ভুলে গিয়েছিল তাদের শেষ ব্যবহারকারীকে দৃশ্যমান করে তোলে। আমি ব্যতিক্রম হিসাবে শেষ হওয়া একটি প্রোগ্রামটিকে অন্য কোনও অপ্রত্যাশিত শেষের মতো ক্র্যাশ হিসাবে বিবেচনা করি।

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


অপারেটিং সিস্টেমটি কী পরিষ্কার করতে পারে তার সীমাবদ্ধতা রয়েছে। সাধারণভাবে, কোনও ওএস জানতে পারে না যে কোনও ধ্রুবক সংস্থান (যেমন ফাইলগুলি) পরিষ্কার করা বা ফিরে ঘুরিয়ে দেওয়া দরকার কিনা, বা এটি স্থানীয় পার্শ্বের সংযোগ বন্ধ করার বাইরেও কোনও দূরবর্তী সংযোগের জন্য কোনও পরিষ্কারের প্রয়োজন আছে কিনা তা জানতে পারে না it
বিট্রি

2

এটা খুবই সাধারণ.

  • কেবলমাত্র প্রোগ্রামটি ক্রাশ করতে এবং পুরো সিস্টেমটি নয় - আমাদের [ভাল] অপারেটিং সিস্টেম রয়েছে।
  • মারাত্মক ত্রুটি উপেক্ষা করার পরিবর্তে একটি প্রোগ্রাম ক্র্যাশ করতে - আমাদের ব্যতিক্রম রয়েছে।

ব্যতিক্রমগুলি আবিষ্কার করার আগে, প্রতিটি ক্রিয়াকলাপের একটি প্রস্থান কোড (ত্রুটি / সাফল্য) ফিরিয়ে আনতে হবে এবং ফাংশনটির কোনও ফলাফল বা আউটপুট এটির দ্বারা নির্ধারিত মেমোরিতে একটি পয়েন্টারটি পাস করে পুনরুদ্ধার করতে হবে।

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

অতএব, সিদ্ধান্ত নেওয়া হয়েছিল - যখন কোনও ত্রুটি ঘটে যায়, যা আপনি বিবেচনায় নেননি, অবিলম্বে ক্র্যাশ! একেএ ব্যতিক্রম হ্যান্ডলিং।


1

ব্যতিক্রমগুলি কেবল একটি ত্রুটি সনাক্তকরণ প্রক্রিয়া। তাদের নিজেরাই কোনও লাভ হয় না।

তবে একটি ত্রুটি সনাক্ত করে তারা ত্রুটিমুক্ত অবস্থায় (পূর্ববর্তী অবস্থা বা একটি নতুন অবস্থানে) স্যুইচ করে ভুল অবস্থা থেকে পুনরুদ্ধার করতে ত্রুটি সহিষ্ণুতা প্রক্রিয়াগুলিকে ট্রিগার করতে দেয়। এইভাবে, ত্রুটিটি সিস্টেমের অন্যান্য অংশে প্রচার করা হয় না।


0

ত্রুটি পরিচালনার প্রবাহ (প্রোগ্রাম কীভাবে একটি ব্যতিক্রমী পরিস্থিতি থেকে পুনরুদ্ধার করার চেষ্টা করছে ) থেকে স্বাভাবিক প্রোগ্রাম প্রবাহকে (প্রোগ্রামটি কী ডিজাইন করা হয়েছে) আলাদা করতে এক্সপিশন উপস্থিত রয়েছে ।

এটি কোডটিকে আরও স্পষ্ট এবং বজায় রাখা সহজ করে তোলে।

দুটি কোড স্নিপলেট বিবেচনা করুন:

try:
    do1()  # this is obvoiusly a normal
    do2()  # program flow
except:
    oups()  # this is exception handling code

এই তুলনায়:

if foo():
    thing1()  # is this part of normal program flow?
else:
    thing2()  # or maybe this one? Or both? When?

অবশ্যই প্রোগ্রামটি ক্রাশ হওয়া থেকে রোধ করতে ব্যতিক্রম হ্যান্ডলিং ব্যবহার করা যেতে পারে:

try {    // very bad code
    my();
    whole();
    ugly();
    application();
    here();
} catch (Throwable t) {
    // pretend it's ok
}

তবে আধুনিক প্রোগ্রামিং ভাষাগুলিতে ব্যতিক্রম হওয়ার কারণ এটি নয়।

এছাড়াও আপনি ব্যবহার করতে পারেন whileএবং breakপরিবর্তে ifকিন্তু এই নয় কি whileএবং breakজন্য হয়।


আসলে "অস্বাভাবিক" নিয়ন্ত্রণ প্রবাহ পরিচালনা করা ঠিক তখনই হয় যখন গোটো এবং এর বন্ধু বিরতি সবচেয়ে কার্যকর are ব্যতিক্রমগুলির সুবিধা হ'ল তারা ফাংশন সীমানা অতিক্রম করতে পারে এবং কলার এটি নির্ধারণ করতে পারে যে এটি ধরা সবচেয়ে উপযুক্ত where
hugomg

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