এর মানে কী?
এএইউ দেখুন : সেগমেন্টেশন দোষ কী? এবং এটির এর পুনরুত্পাদন করার কয়েকটি উদাহরণ রয়েছে, তাই: বিভাগকরণ দোষ কী? । আমি যে সহজ বর্ণনাটি নিয়ে আসতে পারি (এটি নিখুঁত নাও হতে পারে):
প্রোগ্রামটি নিজের বিভাগটির বাইরে কোনও মেমরি অঞ্চল অ্যাক্সেস করার চেষ্টা করেছিল। ওএস এটি অবরুদ্ধ করে।
কিছু ক্ষেত্রে: প্রারম্ভিক পয়েন্টার সহ মান পড়া, একটি অ্যারে সীমার বাইরে যাওয়া, ফাংশন কল (যখন পিছনে সামঞ্জস্য বজায় থাকে না), ...
তবে বড় প্রোগ্রামগুলির সাথে বা অন্যান্য প্রকল্পের লাইভে রিলে যুক্তদের কারণ খুঁজে পাওয়া সবসময় সহজ নয়। এবং বেশিরভাগ ক্ষেত্রে টার্গেট প্রোগ্রামের জন্য বা এর নির্ভরতা (আপস্ট্রিম প্রকল্প বা ডাউন স্ট্রিম ডিস্ট্রিবিউশন প্যাকেজ) হয় তবে একটি বাগ রিপোর্ট দিয়ে শেষ হয়।
আমি কীভাবে এই সমস্যাটি সমাধান করতে পারি?
আপনি যদি কোনও কাস্টম কনফিগারেশন / সেটআপ না করেন এবং আপনার সমস্ত আপডেট ইনস্টল করা থাকে। একটি বাগ রিপোর্ট ফায়ার করুন , দেখুন আমি কীভাবে একটি বাগ রিপোর্ট করব?
উবুন্টু সমর্থিত ওপেন সোর্স যদি ব্যবহার করে ubuntu-bug( apport-bug)। তৃতীয় পক্ষের বদ্ধ উত্সের জন্য, কীভাবে বাগ রিপোর্ট করবেন এবং সম্পর্কিত ডেটা সংগ্রহ করবেন সেগুলির সহায়তা পৃষ্ঠাগুলি পরীক্ষা করুন।
দ্রষ্টব্য: আপনার যদি কিছুটা প্রোগ্রামিং ব্যাকগ্রাউন্ড থাকে তবে এটি নিজেই সমাধান করার জন্য আপনার যথাসাধ্য চেষ্টা করার পরামর্শ দেওয়া হচ্ছে। বহু বাগ রিপোর্ট সেখানে বছরের পর বছর ধরে নিষ্ক্রিয় আছে। অথবা সমস্যাটি রিপোর্ট করার আগে সমাধান করার জন্য কমপক্ষে পর্যাপ্ত ডিবাগ ডেটা সংগ্রহ করুন।
ডিবাগিংয়ের জন্য কিছু দরকারী সরঞ্জাম
apport-bug লগ / কোর ডাম্প / ব্যাকট্র্যাস
সেগমেন্টেশন ত্রুটির আগে যদি আপনার একটি ত্রুটি বার্তা না থাকে। এটি --saveবিকল্প দিয়ে চালান এবং পিছনে ট্রেস লগ সন্ধান করুন:
apport-bug program-cmd --save bug-report_output.txt
gdb backtrace / ডিবাগিং উত্স কোড
যদি এটি কাজ না করে, ব্যবহার করুন gdb:
$ gdb program-cmd
(gdb) run
(gdb) backtrace
যদি আপনি কোনও ত্রুটি বার্তা পান তবে ওয়েব, লঞ্চপ্যাড এবং আপস্ট্রিম প্রজেক্ট বাগ ট্র্যাকারে যদি এরকম কোনও ক্ষেত্রে থাকে তবে দেখুন।
কিছু উন্নত ব্যবহারকারী বা যারা এসি / সি ++ শিখার পথ অনুসরণ করছেন তাদের জন্য তারা সংশ্লিষ্ট -dbgপ্রতীক প্যাকেজগুলি ডাউনলোড করতে পারে । তারপরে আপনি gdbউত্সটির মাধ্যমে প্রোগ্রামের প্রবাহটি সনাক্ত করতে এবং রানটাইম ত্রুটি বাড়ানোর জন্য সঠিক ফাংশন / নির্দেশনা পেতে পারেন।
strace সিস্টেম কল ট্রেসিং
আরেকটি সরঞ্জাম যা সাহায্য করতে পারে তা হ'ল strace, আমি এটি পছন্দ করি। এটি সত্যই একটি শক্তিশালী সরঞ্জাম।
এটি নিজেকে উপস্থাপন করে:
সবচেয়ে সহজ ক্ষেত্রে straceনির্ধারিত কমান্ডটি চালিত না হওয়া অবধি চালিত হয়। এটি কোনও প্রক্রিয়া দ্বারা কল করা সিস্টেম কলগুলি এবং কোনও প্রক্রিয়া দ্বারা প্রাপ্ত সিগন্যালগুলিকে বাধা দেয় এবং রেকর্ড করে। প্রতিটি সিস্টেম কলের নাম, তার আর্গুমেন্ট এবং এর রিটার্ন মান স্ট্যান্ডার্ড ত্রুটিতে বা -o বিকল্পের সাহায্যে নির্দিষ্ট করা ফাইলটিতে মুদ্রিত হয়।
straceহ'ল একটি দরকারী ডায়াগনস্টিক, নির্দেশিক এবং ডিবাগিং সরঞ্জাম। সিস্টেম অ্যাডমিনিস্ট্রেটররা, ডায়াগনিস্টিয়ানস এবং ট্রাবল-শ্যুটাররা প্রোগ্রামগুলির সমস্যা সমাধানের জন্য এটি অমূল্য বলে মনে করেন যার উত্সটি সহজেই পাওয়া যায় না কারণ তাদের সন্ধানের জন্য তাদের পুনরায় সংকলনের প্রয়োজন হয় না। শিক্ষার্থী, হ্যাকার এবং অতিরিক্ত উত্সাহী ব্যক্তিরা দেখতে পাবেন যে কোনও সিস্টেম সম্পর্কে প্রচুর পরিমাণে জানতে পারে এবং এমনকি সাধারণ প্রোগ্রামগুলি সনাক্ত করেও এর সিস্টেম কলগুলি জানতে পারে। এবং প্রোগ্রামাররা দেখতে পাবে যে সিস্টেম কল এবং সিগন্যালগুলি ব্যবহারকারী / কার্নেল ইন্টারফেসে ঘটে যাওয়া ইভেন্ট, তাই এই সীমানাটির একটি নিবিড় পরীক্ষা বাগ বিচ্ছিন্নতা, স্যানিটি পরীক্ষা করা এবং বর্ণের শর্তগুলি ক্যাপচার করার জন্য খুব কার্যকর useful
সূত্র: man strace
ltrace গতিশীল লাইব্রেরি কল ট্রেসিং
ltraceএমন একটি প্রোগ্রাম যা প্রস্থান না হওয়া অবধি কেবল নির্দিষ্ট কমান্ডটি চালায়। এটি গতিশীল লাইব্রেরি কলগুলি বাধাগ্রস্ত করে এবং রেকর্ড করে যা কার্যকর করা প্রক্রিয়া দ্বারা কল করা হয় এবং সেই প্রক্রিয়াটি প্রাপ্ত সংকেতগুলি। এটি প্রোগ্রামটির দ্বারা নির্ধারিত কল কলকে বাধা এবং মুদ্রণ করতে পারে।
এর ব্যবহার strace(1) এর সাথে খুব মিল ।
সূত্র: man ltrace