আমাদের একটি ডাব্লুপিএফ অ্যাপ্লিকেশন রয়েছে যেখানে এর অংশগুলি রানটাইমের সময় ব্যতিক্রম করতে পারে। আমি বিশ্বব্যাপী কোনও অপ্রত্যাশিত ব্যতিক্রম ধরা এবং সেগুলি লগ করতে চাই, তবে অন্যথায় প্রোগ্রামের সম্পাদন চালিয়ে যেতে হবে যেন কিছুই হয় নি (ভিবি এর মতো ধরণের On Error Resume Next
)।
এটি কি সি # তে সম্ভব? এবং যদি তাই হয় তবে আমার ব্যতিক্রম হ্যান্ডলিং কোডটি ঠিক কোথায় লাগানো উচিত?
বর্তমানে আমি কোনও একক পয়েন্ট দেখতে পাচ্ছি না যেখানে আমি একটি try
/ catch
চারপাশে গুটিয়ে রাখতে পারি এবং যা ঘটতে পারে তার সব ব্যতিক্রমকে ধরতে পারে। এবং তারপরেও আমি ধরা পড়ার কারণে যা কিছু কার্যকর করা হয়েছে তা রেখে দিয়েছি। বা আমি কি এখানে মারাত্মক ভুল দিক নিয়ে ভাবছি?
ইটিএ: কারণ নীচে অনেক লোক এটিকে নির্দেশ করেছেন: অ্যাপ্লিকেশনটি পারমাণবিক বিদ্যুৎ কেন্দ্রগুলি নিয়ন্ত্রণের জন্য নয়। যদি এটি ক্র্যাশ হয়ে যায় তবে এটি এত বড় বিষয় নয় তবে র্যান্ডম ব্যতিক্রমগুলি যেগুলি বেশিরভাগই ইউআই-সম্পর্কিত হয় সে প্রসঙ্গে এটির উপদ্রব। এর মধ্যে কয়েকটি ছিল (এবং সম্ভবত এখনও রয়েছে) যেহেতু এটি একটি প্লাগইন আর্কিটেকচার ব্যবহার করে এবং অন্যদের দ্বারা এটি বাড়ানো হতে পারে (সেই ক্ষেত্রে শিক্ষার্থীরাও; সুতরাং কোনও অভিজ্ঞ বিকাশকারী যারা পুরোপুরি ত্রুটিমুক্ত কোড লিখতে সক্ষম হন)।
ধরা পড়ে যাওয়া ব্যতিক্রমগুলি: আমি তাদের সম্পূর্ণ স্ট্যাক ট্রেস সহ লগ ফাইলে লগ করি। এটাই ছিল সেই অনুশীলনের পুরো পয়েন্ট। কেবল সেই সমস্ত লোকদেরই মোকাবেলা করতে যাঁরা আমার উপমাটি ভিবির ওআরএন-তে খুব আক্ষরিক অর্থে নিয়েছিলেন।
আমি জানি যে কিছু শ্রেণীর ত্রুটি অন্ধভাবে উপেক্ষা করা বিপজ্জনক এবং আমার প্রয়োগের উদাহরণটিকে দূষিত করতে পারে। আগেই বলা হয়েছে, এই প্রোগ্রামটি কারও পক্ষে মিশন-সমালোচনা নয়। তাদের সঠিক মনের কেউই এর উপরে মানব সভ্যতার বেঁচে থাকার বাজি ধরতে পারে না। এটি নির্দিষ্ট নকশার পদ্ধতির পরীক্ষার জন্য কেবল একটি ছোট্ট সরঞ্জাম t সফ্টওয়্যার প্রকৌশল.
অ্যাপ্লিকেশনটির তাত্ক্ষণিক ব্যবহারের জন্য ব্যতিক্রম ঘটতে পারে এমন অনেক কিছুই নেই:
- কোনও ব্যতিক্রম হ্যান্ডলিং - ত্রুটি ডায়লগ এবং অ্যাপ্লিকেশন প্রস্থান নেই। পরীক্ষার পুনরাবৃত্তি করতে হবে, যদিও সম্ভবত অন্য একটি বিষয় নিয়ে। কোনও ত্রুটি লগ করা হয়নি, যা দুর্ভাগ্যজনক।
- জেনেরিক ব্যতিক্রম হ্যান্ডলিং - সৌম্য ত্রুটি আটকা পড়েছে, কোনও ক্ষতি হয়নি। উন্নয়নের সময় আমরা যে সমস্ত ত্রুটি দেখছিলাম সেগুলি থেকে বিচার করা উচিত এটি সাধারণ ঘটনা। এই জাতীয় ত্রুটি উপেক্ষা করার কোনও তাত্ক্ষণিক পরিণতি হওয়া উচিত নয়; মূল ডেটা স্ট্রাকচারগুলি যথেষ্ট পরিমাণে পরীক্ষা করা হয়েছে যে তারা সহজেই এগুলি থেকে বেঁচে থাকবে।
- জেনেরিক ব্যতিক্রম হ্যান্ডলিং - গুরুতর ত্রুটি আটকা পড়েছে, সম্ভবত পরবর্তী সময়ে ক্রাশ। এটি খুব কমই ঘটতে পারে। আমরা এখনও পর্যন্ত এটি কখনও দেখিনি। ত্রুটি যাইহোক লগড এবং ক্রাশ অনিবার্য হতে পারে। সুতরাং এটি ধারণাগতভাবে খুব প্রথম ক্ষেত্রে অনুরূপ। আমাদের বাদে আমাদের একটি স্ট্যাক ট্রেস রয়েছে। এবং বেশিরভাগ ক্ষেত্রে ব্যবহারকারী এমনকি খেয়ালও করবেন না।
প্রোগ্রাম দ্বারা উত্পাদিত পরীক্ষার ডেটা হিসাবে: একটি গুরুতর ত্রুটি খারাপভাবে ঠিক কোন তথ্য রেকর্ড করা হতে পারে। সূক্ষ্ম পরিবর্তনগুলি যা পরীক্ষার ফলাফলকে এতটা সামান্য পরিবর্তন করে দেয় তা অসম্ভব সম্ভাবনা। এমনকি সেই ক্ষেত্রেও যদি ফলাফলগুলি সন্দেহজনক মনে হয় ত্রুটিটি লগ হয়েছিল; এটি এখনও মোট তথ্য সরবরাহকারী হলে ডেটা পয়েন্টটি ফেলে দিতে পারে।
সংক্ষিপ্তসার হিসাবে: হ্যাঁ, আমি নিজেকে এখনও কমপক্ষে আংশিক বুদ্ধিমান বিবেচনা করি এবং আমি বিশ্বব্যাপী ব্যতিক্রম পরিচালনার রুটিনটিকে বিবেচনা করি না যা প্রোগ্রামটি চলমান অশুভ হতে পারে leaves আগে দুবার বলেছি, আবেদনের উপর নির্ভর করে এই জাতীয় সিদ্ধান্ত বৈধ হতে পারে। এই ক্ষেত্রে এটি একটি বৈধ সিদ্ধান্ত হিসাবে বিবেচিত হয়েছিল এবং সম্পূর্ণ এবং সম্পূর্ণ বুলিশট নয়। অন্য যে কোনও অ্যাপ্লিকেশনের ক্ষেত্রে সিদ্ধান্তটি ভিন্ন মনে হতে পারে। তবে দয়া করে আমাকে বা অন্য লোকেরা যারা এই প্রকল্পে কাজ করেছিলেন কেবলমাত্র আমরা ত্রুটিগুলি উপেক্ষা করছি বলে বিশ্বকে উড়িয়ে দেওয়ার জন্য দোষারোপ করবেন না।
পার্শ্ব নোট: এই অ্যাপ্লিকেশনটির জন্য ঠিক একজন ব্যবহারকারী রয়েছেন। এটি উইন্ডোজ বা অফিসের মতো কিছু নয় যা কয়েক মিলিয়ন দ্বারা ব্যবহার করা হয় যেখানে ব্যবহারকারীর কাছে ব্যতিক্রমী বুদবুদ থাকার ব্যয়টি ইতিমধ্যে প্রথম স্থানে খুব আলাদা হবে।
On Error Resume Next
সি # তে সম্ভব নয়। একটি Exception
(সি # এর "ত্রুটি" নেই) এর পরে আপনি কেবলমাত্র পরবর্তী বিবৃতি দিয়ে পুনরায় শুরু করতে পারবেন না: মৃত্যুদন্ড কার্যকর হবে একটি catch
ব্লক - বা ইভেন্ট হ্যান্ডলারের একটিতে নীচের উত্তরে বর্ণিত।