সেগমেন্টেশন দোষ কী?


27

উবুন্টুতে আমি বহুবার সেগমেন্টেশন ফল্ট ত্রুটির মুখোমুখি হয়েছি। সেগমেন্টেশন দোষ কী এবং কখন তা ঘটে?


1
কেবল এটি আবরণ করার জন্য: আমারও একই রকম সমস্যা ছিল, যদিও আমার সেগফাল্টগুলি নির্ভরযোগ্যভাবে পুনরুত্পাদনযোগ্য ছিল না এবং এগুলি (প্রায়) এলোমেলো অ্যাপ্লিকেশন থেকে এসেছিল। খুঁজে পেয়েছি সম্ভবত আমার স্মৃতিশক্তি নষ্ট হয়ে গেছে। সুতরাং যদি বেশিরভাগ প্রোগ্রামের কারণে সেগফাল্ট হয়, তবে কোনওটি র‍্যামের দিকে আরও ঘনিষ্ঠভাবে নজর রাখতে পারে।

উত্তর:


25

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

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

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


ভাগ্যক্রমে সমস্ত বিভাগকে ত্রুটি ওএস :) আপগ্রেড করার মাধ্যমে স্থির করা হয়েছে। আমার প্রশ্নটি সাধারণভাবে বিভাগকরণের ত্রুটি সম্পর্কিত। কোনও নির্দিষ্ট অ্যাপের জন্য নয় for
টাচিয়ন্স

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

আচ্ছা এটি একটি অ্যাপ্লিকেশনটিতে একটি সেগমেন্টেশন দোষ সম্পর্কে। আমি এটি একটি সি ++ প্রোগ্রামে ঘটতে চাইছিলাম যেখানে একই প্রোগ্রামটি উইন্ডোজ বা টার্বো সি ++ (ওয়াইনে) (পুরোপুরি লিনাক্সে অঞ্জুটা ব্যবহার করে) পুরোপুরি সূক্ষ্মভাবে চালিত হয় ndআর এটি কেবলমাত্র বেসিক প্রোগ্রাম এবং অ্যাপ্লিকেশন নয় (ট্রের মতো প্রোগ্রাম) , গ্রাফিকস, ইত্যাদি)
নির্মিক

ধন্যবাদ .কিন্তু আমি বেশিরভাগ ক্ষেত্রেই ভয়ে আছি অ্যাপে বিভাগীয়করণ ত্রুটি সম্পর্কে প্রশ্ন জিজ্ঞাসা করা এখানে অফটোপিক। :)
টাচিয়ন্স

@ নীরমিক: সম্ভবত এটি স্ট্যাকওভারফ্লোটির জন্য বিষয় :)
ট্যাচইনস

4

বিভাগে ত্রুটি অ্যাপ্লিকেশনটিতে বাগের কারণে ঘটে। প্রযুক্তিগতভাবে এর অর্থ হল যে অ্যাপ্লিকেশনটি মেমরির যে অংশটির সাথে সম্পর্কিত নয় (বা অস্তিত্ব নেই) এমন কিছু পড়তে বা লিখতে চেষ্টা করে। এটি অবশ্যই অন্য কারও স্মৃতিতে পড়তে বা লিখতে নিষেধ এবং যখন সিস্টেম (কার্নেল) এটি সনাক্ত করে, এটি অ্যাপ্লিকেশনটি ছাড়তে বাধ্য করবে।


0

সেই দিনগুলি হয়ে গেল যখন লোকেরা সমাবেশ কোডটি আবিষ্কার করে কোনও সমস্যার ডিবাগ করত। অ্যাবেনডস, ডাঃ ওয়াটসন, সেগমেন্টেশন দোষ। সেই সবুজ দিন কেটে গেল।

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

এটি ডিবাগ করুন এবং যদি আপনি প্রায়শই এটি পুনরুত্পাদন করতে পারেন তবে এটি ঠিক করুন। আপনি যদি এটি পুনরুত্পাদন করতে না পারেন, কেবল আপনার হাতে যোগ দিন, হাঁটু গেড়ে নিন এবং জাহান্নামের মতো প্রার্থনা করুন যা আপনি এটি "নিয়মিত" দেখেন না।


সেগফাল্টগুলি এমন ভাষায় লিখিত যে কোনও প্রোগ্রামে ট্রিগার করা যেতে পারে যা সরাসরি মেমোরি অ্যাক্সেসের অনুমতি দেয়। তারা সাধারণত কার্নেল ক্রাশ করবে না।
অ্যালেক্স এল।

@AlexL। এটা সঠিক। আমি আমার উত্তর সম্পাদনা করব।
সিদ্ধার্থ

আমি আশা করি আমি আমার চিন্তাভাবনাগুলি সঠিকভাবে উপস্থাপন করেছি।
সিদ্ধার্থ

@AlexL। আপনি দয়া করে এটি আরও একবার পর্যালোচনা করতে পারেন। আমি এটি মুছে ফেলব, যদি এটি এখনও সঠিক না হয়।
সিদ্ধার্থ

ইহা ভাল. তবুও, (1) যদিও কোনও প্রোগ্রামের পক্ষে SIGSEGVহ্যান্ডলারটিকে অন্য কোনও কিছুতে সেট করা SIG_DFL(যা কোর ডাম্প করে এবং SIGSEGVএটির জন্য প্রস্থান করা হয় ) খুব বিরল কারণ আপনি যদি মেমরিটি অ্যাক্সেস করছেন যা আপনার হওয়া উচিত নয় তবে কিছু খুব এগিয়ে গেছে since ভুল এবং পুনরুদ্ধার সম্ভবত অসম্ভব। (২) প্রক্রিয়াটি বন্ধ হয়ে যাওয়ার পরে কেবল একটি কোর ফেলে দেওয়া হবে। (3) কোর ডাম্পটিতে কেবল ডাম্প করা প্রক্রিয়াটির মেমরি এবং রেজিস্টার অন্তর্ভুক্ত রয়েছে। (4) অন্যান্য প্রক্রিয়াগুলি, সিপিইউ এবং কার্নাল অন্য কোনও প্রক্রিয়ার সেগফল্ট দ্বারা প্রভাবিত হয় না।
অ্যালেক্স এল।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.