লিনাক্সে কীভাবে জিএনইউ ডিবাগার ব্যবহার করবেন

GNU ডিবাগার একটি প্রোগ্রাম ডিবাগ করতে, ক্র্যাশ বিশ্লেষণ করতে বা একটি নির্দিষ্ট পয়েন্টে প্রোগ্রামটি কী করে তা দেখতে ব্যবহৃত হয়। এটি 1980-এর দশকে GNU প্রজেক্ট দ্বারা তৈরি করা হয়েছিল এবং এটি সবচেয়ে বহুল ব্যবহৃত কমান্ড লাইন ডিবাগারের পাশাপাশি সবচেয়ে জনপ্রিয় GNU সফ্টওয়্যারগুলির মধ্যে একটি।

আসুন প্রথমে একটি ছোট সি প্রোগ্রাম লিখি যা আমরা ডিবাগ করব। শুরু করতে, একটি নতুন তৈরি করুন .c ফাইল ব্যবহার করে vim অথবা আপনার পছন্দের কোনো সম্পাদক:

vim test.c

নিম্নলিখিত সি প্রোগ্রাম তৈরি করুন:

#ইনক্লুড int main() { int i = 5; float f = 5.5 i = i + 3; f = f + 2.2; printf("i এবং f-এর মান হল: %d এবং %f\n", i, f); রিটার্ন 0; }

প্রেস করুন পলায়ন vim কমান্ড মোডে যেতে। তারপর টাইপ করুন :wq প্রোগ্রাম সংরক্ষণ এবং প্রস্থান করতে.

কম্পাইল করুন এবং দেখুন প্রোগ্রাম চলে কিনা:

gcc test.c -o test ./test i এবং f এর মান হল: 8 এবং 7.700000

একটি প্রোগ্রামে ডিবাগিং সমর্থন সক্ষম করতে, আমরা এটি দিয়ে কম্পাইল করি -g পতাকা যদি পতাকাটি ব্যবহার না করা হয়, ব্যবহারকারী এখনও সীমিত বিকল্প সহ প্রোগ্রামটি ডিবাগ করতে পারেন।

gcc test.c -g -o পরীক্ষা

ডিবাগিং শুরু করতে আমাদের এক্সিকিউটেবল ফাইল পরীক্ষা ভিতরে জিডিবি, আমরা চালাই:

জিডিবি পরীক্ষা

এটা খুলবে জিডিবি কনসোল, যেখানে আপনি টাইপ করতে পারেন জিডিবি আদেশ কমান্ডের একটি তালিকা দেখতে ব্যবহার করুন সাহায্য আদেশ

$(gdb) সাহায্য ক্লাসের কমান্ডের তালিকা: উপনাম -- অন্যান্য কমান্ডের ব্রেকপয়েন্টের উপনাম -- নির্দিষ্ট পয়েন্টে প্রোগ্রাম বন্ধ করা ডেটা -- ডাটা ফাইল পরীক্ষা করা -- ফাইল ইন্টারনাল নির্দিষ্ট করা ও পরীক্ষা করা -- রক্ষণাবেক্ষণ কমান্ড অস্পষ্ট -- অস্পষ্ট বৈশিষ্ট্য চলমান -- প্রোগ্রাম স্ট্যাক চালানো -- স্ট্যাকের স্থিতি পরীক্ষা করা -- স্ট্যাটাস অনুসন্ধান সমর্থন -- সহায়তা সুবিধা ট্রেসপয়েন্ট -- প্রোগ্রাম এক্সিকিউশনের ট্রেসিং ব্যবহারকারী-সংজ্ঞায়িত প্রোগ্রাম বন্ধ না করে -- ব্যবহারকারী-সংজ্ঞায়িত কমান্ড টাইপ করুন "হেল্প" একটি ক্লাস নাম অনুসরণ করে সেই ক্লাসের কমান্ডের তালিকার জন্য। সমস্ত কমান্ডের তালিকার জন্য "সব সাহায্য করুন" টাইপ করুন। সম্পূর্ণ ডকুমেন্টেশনের জন্য কমান্ডের নাম অনুসরণ করে "হেল্প" টাইপ করুন। "শব্দ" সম্পর্কিত কমান্ডগুলি অনুসন্ধান করতে "অ্যাপ্রোপোস শব্দ" টাইপ করুন। দ্ব্যর্থহীন হলে কমান্ড নামের সংক্ষিপ্ত রূপগুলি অনুমোদিত।

আপনি তারপর টাইপ করতে পারেন help class_name যে শ্রেণীর অন্তর্গত কমান্ড দেখতে. একটি সাবস্ট্রিং ব্যবহার করে কমান্ড অনুসন্ধান করতে, ব্যবহার করুন apropos সাবস্ট্রিং.

প্রোগ্রাম একটি ফাংশন প্রবেশ করার সময় একটি ব্রেকপয়েন্ট সেট করতে, চালান:

$(gdb) ব্রেক মেইন

এখানে আমরা আমাদের কোডের একমাত্র ফাংশনে একটি ব্রেকপয়েন্ট সেট করি, যেমন প্রধান. কমান্ডটি ব্যবহার করুন চালান পরবর্তী ব্রেকপয়েন্ট পর্যন্ত বা প্রস্থান না হওয়া পর্যন্ত প্রোগ্রামটি চালাতে।

$(gdb) চালান

একটি ফাংশনে একটি নির্দিষ্ট স্থানে একটি ব্রেকপয়েন্ট সেট করতে, ব্যবহার করুন:

বিরতি * প্রধান + 4

এটি ফাংশনের প্রধান 4র্থ লাইনে একটি ব্রেকপয়েন্ট সেট আপ করবে।

এখন, প্রোগ্রামের প্রবাহকে পরবর্তী কোড লাইনে নিয়ে যেতে, সহজভাবে চালান পদক্ষেপ আদেশ

$(gdb) ধাপ 5: float f = 5.5;

একটি পরিবর্তনশীল বিষয়বস্তু প্রদর্শন করতে, চালান প্রদর্শন .

$(gdb) প্রদর্শন i 6: i = 5

একটি ভেরিয়েবলের বিষয়বস্তু পরিবর্তন করতে, যা একটি ভেরিয়েবল, রানের নির্দিষ্ট মানের অধীনে একটি প্রোগ্রামের রান বিশ্লেষণ করার প্রয়োজন হতে পারে সেট ভেরিয়েবল = এক্সপ্রেশন.

$(gdb) সেট ভেরিয়েবল i=10 $(gdb) প্রদর্শন i 7: i = 10

এখানে, ‘এক্সপ্রেশন’ যেকোনো বৈধ (পাটিগণিত/যৌক্তিক) অভিব্যক্তি হতে পারে। সরলতার খাতিরে আমরা ভেরিয়েবলে আরেকটি মান (10) বরাদ্দ করি i.

প্রোগ্রামের জন্য সমাবেশ কোড প্রিন্ট করতে, কমান্ড ব্যবহার করুন বিচ্ছিন্ন ফাংশনের নাম:

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

কোডের একটি নির্দিষ্ট লাইনে ডিবাগার জাম্প করতে, চালান:

$(gdb) জাম্প *main + 2 0x400528 এ অবিরত। ব্রেকপয়েন্ট 2, 0x000000000040052a main () এ test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

এটি ফাংশনের কোডের ২য় লাইনের মেমরি অবস্থানে ডিবাগারকে লাফিয়ে দেবে প্রধান. উল্লেখ্য যে এখানে আমি প্রধানের শুরু থেকে সরাসরি দ্বিতীয় স্থানে লাফিয়েছি। অতএব, পরিবর্তনশীল i কখনই সেট করা হয়নি, যার ফলে ডিবাগার থ্রোয়িং ত্রুটি দেখা দেয় যে এটি ভেরিয়েবলের ঠিকানায় মেমরি বিষয়বস্তু অ্যাক্সেস করতে পারে না i.

এগুলি হল কিছু মৌলিক কমান্ড যা আপনাকে লিনাক্সে একটি এক্সিকিউটেবল ফাইল ডিবাগ করা শুরু করতে সাহায্য করতে পারে। আমরা আশা করি আপনি এই পৃষ্ঠায় তথ্য সহায়ক হবে.