উবুন্টুতে আমি বহুবার সেগমেন্টেশন ফল্ট ত্রুটির মুখোমুখি হয়েছি। সেগমেন্টেশন দোষ কী এবং কখন তা ঘটে?
উবুন্টুতে আমি বহুবার সেগমেন্টেশন ফল্ট ত্রুটির মুখোমুখি হয়েছি। সেগমেন্টেশন দোষ কী এবং কখন তা ঘটে?
উত্তর:
একটি ত্রুটি এই বলে সেগমেন্টেশন ফল্ট (অথবা segfault করব , অথবা SIGSEGV ) উবুন্টু এবং অন্যান্য ইউনিক্সের মত অপারেটিং সিস্টেম বা বলার অপেক্ষা রাখে না সাধারণ নিরাপত্তা ত্রুটি উইন্ডোজে যখন একটি প্রোগ্রাম প্রচেষ্টা মেমরির একটি অংশ অ্যাক্সেস করা যাবে না, অথবা কোন প্রোগ্রাম অ্যাক্সেস করতে হয় অ্যাক্সেস নিষিদ্ধ। সেগমেন্টেশন ত্রুটি হ'ল এক ধরণের প্রোগ্রাম ক্রাশ, এটি কোনও প্রোগ্রামের অস্বাভাবিক সমাপ্তি। আরও তথ্যের জন্য উইকিপিডিয়া নিবন্ধগুলি ক্র্যাশ , মেমরি সুরক্ষা , বিভাগীয় ত্রুটি , সাধারণ সুরক্ষা ত্রুটি , এবং সিএসএসইজিভি দেখুন (এবং এখানে বিষয়টির আরও টেক্সচার্ড বোঝার জন্য এখানে উপস্থাপন করা হয়েছে)।
প্রোগ্রামটি যেখানে ঘটে থাকে সেখানে বাগের কারণে প্রায়শই একটি সেগমেন্টেশন ত্রুটি হয়। আমি অনুমান করছি যে আপনার বেশিরভাগ বা সেগমেন্টেশন ত্রুটি একই অ্যাপ্লিকেশন থেকে ঘটছে। আপনার মেশিনে কোন ভাগে বিভাজন ঘটছে এবং কোন প্রোগ্রামটি ক্র্যাশ হচ্ছে সে সম্পর্কে দয়া করে আরও বিশদ সরবরাহ করুন। আপনি যে ত্রুটি বার্তাটি গ্রহণ করছেন তার সম্পূর্ণ এবং সঠিক পাঠ্য এবং এর আগে উপস্থিত অন্য কোনও বার্তাও দয়া করে সরবরাহ করুন। এটি আমাদের পক্ষে আপনার সমস্যার জন্য সুনির্দিষ্ট পরামর্শ প্রদান করা সম্ভব করা উচিত (কেবলমাত্র বিভাগের ত্রুটি কী তা সম্পর্কে সাধারণ তথ্য দেওয়া থেকে)।
আপনার এই তথ্য সরবরাহ করার সর্বোত্তম উপায় হ'ল আপনার প্রশ্নটি অন্তর্ভুক্ত করার জন্য এটি সম্পাদনা করা । বিকল্পভাবে, আপনি যদি এই প্রশ্নটি কেবল বিভাগের ত্রুটিগুলি সম্পর্কে সাধারণভাবে দেখতে চান তবে আপনার বিভাগটি ত্রুটিগুলি বিশেষত কী ঘটছে তা সম্পর্কে জানতে আপনি একটি নতুন প্রশ্ন পোস্ট করতে পারেন (আপনি যদি এটি করেন তবে আপনার নতুন প্রশ্নে এই সমস্ত বিবরণ সরবরাহ করার বিষয়টি নিশ্চিত করুন) ।
বিভাগে ত্রুটি অ্যাপ্লিকেশনটিতে বাগের কারণে ঘটে। প্রযুক্তিগতভাবে এর অর্থ হল যে অ্যাপ্লিকেশনটি মেমরির যে অংশটির সাথে সম্পর্কিত নয় (বা অস্তিত্ব নেই) এমন কিছু পড়তে বা লিখতে চেষ্টা করে। এটি অবশ্যই অন্য কারও স্মৃতিতে পড়তে বা লিখতে নিষেধ এবং যখন সিস্টেম (কার্নেল) এটি সনাক্ত করে, এটি অ্যাপ্লিকেশনটি ছাড়তে বাধ্য করবে।
সেই দিনগুলি হয়ে গেল যখন লোকেরা সমাবেশ কোডটি আবিষ্কার করে কোনও সমস্যার ডিবাগ করত। অ্যাবেনডস, ডাঃ ওয়াটসন, সেগমেন্টেশন দোষ। সেই সবুজ দিন কেটে গেল।
বিভাজন ত্রুটির অন্যতম কারণ হ'ল মেমোরিতে সরাসরি অ্যাক্সেস থাকা কোডটি ব্যর্থ হয়। কোডের একটি অংশটি যখন অন্য অ্যাপ্লিকেশনের মেমরি বিভাগে অ্যাক্সেস করার চেষ্টা করে, সেগমেন্টেশন ত্রুটি ঘটে। মেমরির বড় বরাদ্দ পেতে মেমরির বরাদ্দগুলি কিছু সময় ঘুরে যায়। এটি পুনরুদ্ধার করার চেষ্টা করার পরে, কার্নেল তার সমস্ত মেমরি তথ্য একটি ফাইলে সংরক্ষণ করার চেষ্টা করে, সিপিইউতে চলমান সমস্ত অ্যাপ্লিকেশনের বর্তমান অবস্থা এবং তাদের অবস্থার (শেষ নির্দেশনাটি) কোনও ফাইলে সংরক্ষণ করে মারা যায়। এটি যথাযথ পুনরুদ্ধার তথ্য সংরক্ষণ করার চেষ্টা করবে এবং যতগুলি সম্ভব ফাইলগুলি বন্ধ করে দেবে, যাতে এইচডিডি'র ভাঙা লিঙ্কগুলি না পায়।
এটি ডিবাগ করুন এবং যদি আপনি প্রায়শই এটি পুনরুত্পাদন করতে পারেন তবে এটি ঠিক করুন। আপনি যদি এটি পুনরুত্পাদন করতে না পারেন, কেবল আপনার হাতে যোগ দিন, হাঁটু গেড়ে নিন এবং জাহান্নামের মতো প্রার্থনা করুন যা আপনি এটি "নিয়মিত" দেখেন না।
SIGSEGV
হ্যান্ডলারটিকে অন্য কোনও কিছুতে সেট করা SIG_DFL
(যা কোর ডাম্প করে এবং SIGSEGV
এটির জন্য প্রস্থান করা হয় ) খুব বিরল কারণ আপনি যদি মেমরিটি অ্যাক্সেস করছেন যা আপনার হওয়া উচিত নয় তবে কিছু খুব এগিয়ে গেছে since ভুল এবং পুনরুদ্ধার সম্ভবত অসম্ভব। (২) প্রক্রিয়াটি বন্ধ হয়ে যাওয়ার পরে কেবল একটি কোর ফেলে দেওয়া হবে। (3) কোর ডাম্পটিতে কেবল ডাম্প করা প্রক্রিয়াটির মেমরি এবং রেজিস্টার অন্তর্ভুক্ত রয়েছে। (4) অন্যান্য প্রক্রিয়াগুলি, সিপিইউ এবং কার্নাল অন্য কোনও প্রক্রিয়ার সেগফল্ট দ্বারা প্রভাবিত হয় না।