আমাকে একবার পরামর্শ দেওয়া হয়েছিল যে সি ++ প্রোগ্রামের শেষ পর্যন্ত সমস্ত ব্যতিক্রম ধরা উচিত। সেই সময় দেওয়া যুক্তিটি মূলত ছিল যে প্রোগ্রামগুলি ব্যতিক্রমগুলি main()
একটি অদ্ভুত জম্বি রাজ্যে প্রবেশের বাইরে যেতে দেয় । আমাকে এটি বেশ কয়েক বছর আগে বলা হয়েছিল এবং পূর্ববর্তী সময়ে আমি বিশ্বাস করি যে পর্যবেক্ষণ করা ঘটনাটি প্রকল্প থেকে উদ্বেগজনকভাবে দীর্ঘ মূল ডাম্পগুলির দীর্ঘ প্রজন্মের কারণে হয়েছিল।
এ সময়টিকে উদ্ভট মনে হলেও দৃ but়প্রত্যয়ী। এটি সম্পূর্ণ অযৌক্তিক ছিল যে সমস্ত ব্যতিক্রম না ধরার জন্য প্রোগ্রামারদের "শাস্তি" দেওয়ার জন্য সি ++ করা উচিত তবে আমার আগে প্রমাণগুলি এটির ব্যাক আপ বলে মনে হয়। প্রকল্পে প্রশ্নোত্তর ব্যতীত ব্যতিক্রম ছড়িয়ে দেওয়া প্রোগ্রামগুলি একটি অদ্ভুত জম্বি রাজ্যে প্রবেশ করেছে বলে মনে হয়েছিল - বা আমার মনে হয় কারণটি এখন কারণ হিসাবে, একটি অযাচিত কোর ডাম্পের মাঝামাঝি প্রক্রিয়াটি থামানো অস্বাভাবিক কঠিন।
(যে সময়ে কেন এটি আরও সুস্পষ্ট ছিল না এমন ভেবে কারও জন্য: প্রকল্পটি একাধিক প্রক্রিয়া থেকে একাধিক ফাইলে প্রচুর পরিমাণে আউটপুট তৈরি করেছিল যা কোনও প্রকারের aborted (core dumped)
বার্তাকে কার্যকরভাবে অস্পষ্ট করে দেয় এবং এই বিশেষ ক্ষেত্রে, মূল ডাম্পগুলির ময়না তদন্ত করা হয়নি) একটি গুরুত্বপূর্ণ ডিবাগিং কৌশল না কারণ কোর ডাম্পগুলিকে খুব বেশি চিন্তা-ভাবনা করা হত না with একটি প্রোগ্রাম নিয়ে ইস্যুগুলি সাধারণত দীর্ঘকালীন প্রোগ্রামের মাধ্যমে সময়ের সাথে অনেক ইভেন্ট থেকে জমে থাকা রাষ্ট্রের উপর নির্ভর করে না বরং একটি স্বল্প সময়ের প্রোগ্রামের প্রাথমিক ইনপুটগুলি (< 1 ঘন্টা) তাই আরও তথ্য পেতে একটি ডিবাগ বিল্ড থেকে একই ইনপুট সহ একটি প্রোগ্রাম পুনরায় চালু করা বা কোনও ডিবাগারে পুনরায় চালু করা আরও ব্যবহারিক ছিল))
কেবলমাত্র ব্যতিক্রমগুলি রোধ করা থেকে বিরত রাখার উদ্দেশ্যে ব্যতিক্রমগুলি ধরার কোনও বড় সুবিধা বা অসুবিধা আছে কিনা তা নিয়ে আমি বর্তমানে নিশ্চিত main()
।
অতীতকে বাধা দেওয়ার জন্য যে ছোট সুবিধাটি আমি ভাবতে পারি main()
তা হ'ল এটির ফলাফলটি std::exception::what()
টার্মিনালে মুদ্রণের কারণ ঘটায় (কমপক্ষে লিনাক্সে জিসিসি সংকলিত প্রোগ্রাম সহ)। অন্যদিকে, std::exception
ফলাফলটি থেকে প্রাপ্ত সমস্ত ব্যতিক্রম এবং ফলাফল মুদ্রণের পরিবর্তে এটি অর্জন তুচ্ছ std::exception::what()
এবং যদি ব্যতিক্রম থেকে প্রাপ্ত কোনও বার্তা মুদ্রণ করা বাঞ্ছনীয় হয় std::exception
তবে এটি মুদ্রণের জন্য রেখে যাওয়ার আগে অবশ্যই ধরা main()
পড়তে হবে বার্তা.
অতীতে বুদবুদ হওয়ার জন্য ব্যতিক্রমীদের অনুমতি দেওয়ার জন্য আমি যে পরিমিত অসুবিধা ভাবতে পারি main()
তা হ'ল অযাচিত কোর ডাম্পগুলি উত্পন্ন হতে পারে। প্রচুর পরিমাণে মেমরি ব্যবহার করার প্রক্রিয়াটির জন্য এটি একটি উপদ্রব হতে পারে এবং কোনও প্রোগ্রামের কোর ডাম্পিং আচরণ নিয়ন্ত্রণের জন্য ওএস-নির্দিষ্ট ফাংশন কলগুলির প্রয়োজন হয়। অন্যদিকে, যদি কোনও মূল ডাম্প এবং প্রস্থানটি পছন্দসই হয় তবে পরিবর্তে এটি কল করে যে কোনও সময় অর্জন করা যেতে পারে std::abort()
এবং কল ডাম্প ছাড়াই কোনও প্রস্থান যে কোনও সময় কল করেই অর্জন করা যেতে পারে std::exit()
।
উপাখ্যান্তভাবে, আমি মনে করি না যে what(): ...
ক্র্যাশ হওয়ার পরে আমি কোনও বিস্তৃত প্রোগ্রাম দ্বারা মুদ্রিত ডিফল্ট বার্তাটি দেখেছি ।
সি ++ ব্যতিক্রমকে অতীতকে বাধা দেওয়ার পক্ষে বা বিপক্ষে কী জোর তর্ক রয়েছে main()
?
সম্পাদনা করুন: এই সাইটে অনেকগুলি সাধারণ ব্যতিক্রম হ্যান্ডলিং প্রশ্ন রয়েছে। আমার প্রশ্নটি বিশেষত সি ++ ব্যতিক্রম সম্পর্কে যা হ্যান্ডেল করা যায় না এবং এটিকে পুরোপুরি তৈরি করে main()
ফেলেছে - সম্ভবত কোনও ত্রুটি বার্তা মুদ্রণ করা যেতে পারে তবে এটি তাত্ক্ষণিকভাবে থামানো ত্রুটি দেখায়।