আপনি catch throw
যেখানে ব্যতিক্রম উত্পন্ন হয় সেখানে ডিবাগারটি থামাতে "ক্যাচপয়েন্ট" ( ) ব্যবহার করে চেষ্টা করতে পারেন ।
নিম্নলিখিত উদ্ধৃতাংশ GDB ম্যানুয়াল থেকে catchpoint বৈশিষ্ট্য বর্ণনা করা হয়েছে।
5.1.3 সেটপয়েন্ট পয়েন্ট স্থাপন করা হচ্ছে
নির্দিষ্ট ধরণের প্রোগ্রাম ইভেন্টের জন্য সি -++ ব্যতিক্রম বা ভাগ করা লাইব্রেরি লোড হওয়ার কারণে আপনি ডিবাগারটি থামানোর জন্য ক্যাচপয়েন্টগুলি ব্যবহার করতে পারেন। ক্যাচপয়েন্ট সেট করতে ক্যাচ কমান্ডটি ব্যবহার করুন।
ঘটনা ধরা
বন্ধ করুন যখন ঘটনা ঘটে। ইভেন্ট নিম্নলিখিত যে কোনও হতে পারে:
tcatch ইভেন্ট
একটি ক্যাচপয়েন্ট সেট করুন যা কেবলমাত্র একটি স্টপের জন্য সক্ষম। ইভেন্টটি প্রথমবার ধরা পড়ার পরে ক্যাচপয়েন্টটি স্বয়ংক্রিয়ভাবে মোছা হয়।
info break
বর্তমান ক্যাপপয়েন্টগুলি তালিকা করতে কমান্ডটি ব্যবহার করুন ।
জিডিবিতে বর্তমানে সি ++ ব্যতিক্রম হ্যান্ডলিংয়ের (ক্যাচ থ্রো এবং ক্যাচ ক্যাচ) কিছু সীমাবদ্ধতা রয়েছে:
আপনি যদি ইন্টারেক্টিভভাবে কোনও ফাংশন কল করেন, ফাংশনটি সম্পাদন শেষ হলে GDB সাধারণত আপনার কাছে নিয়ন্ত্রণ ফিরিয়ে দেয়। যদি কলটি একটি ব্যতিক্রম উত্থাপন করে, তবে, কলটি আপনার কাছে নিয়ন্ত্রণ ফিরিয়ে আনার প্রক্রিয়াটিকে বাইপাস করতে পারে এবং আপনার প্রোগ্রামটি বাতিল করতে বা ব্রেকআপপয়েন্টে আঘাত না হওয়া পর্যন্ত কেবল চালিয়ে যেতে পারে, জিডিবি শুনছে বা প্রস্থান করে এমন সংকেত ধরেছে। আপনি ব্যতিক্রমের জন্য একটি ক্যাচপয়েন্ট সেট করলেও এটি ক্ষেত্রে; ইন্টারেক্টিভ কলগুলির মধ্যে ব্যতিক্রমগুলিতে ক্যাচপয়েন্টগুলি অক্ষম করা হয়।
আপনি ইন্টারেক্টিভভাবে একটি ব্যতিক্রম উত্থাপন করতে পারবেন না।
আপনি ইন্টারেক্টিভভাবে একটি ব্যতিক্রম হ্যান্ডলার ইনস্টল করতে পারবেন না।
কখনও কখনও ক্যাচ ব্যতিক্রম হ্যান্ডলিংয়ের ডিবাগ করার সর্বোত্তম উপায় নয়: যদি কোনও ব্যতিক্রম কোথায় উত্থাপিত হয় সে সম্পর্কে আপনাকে যদি সঠিকভাবে জানতে হয় তবে ব্যতিক্রম হ্যান্ডলারটি ডেকে যাওয়ার আগে থামানো ভাল, যেহেতু কোনও অনিচ্ছাকৃত হওয়ার আগে আপনি স্ট্যাকটি দেখতে পাবেন। আপনি যদি এর পরিবর্তে কোনও ব্যতিক্রম হ্যান্ডলারটিতে ব্রেকপয়েন্ট স্থাপন করেন তবে ব্যতিক্রমটি কোথায় উত্থাপিত হয়েছিল তা সন্ধান করা সহজ হতে পারে না।
ব্যতিক্রম হ্যান্ডলার বলার আগে থামার জন্য আপনার বাস্তবায়নের কিছু জ্ঞান প্রয়োজন need জিএনইউ সি ++ এর ক্ষেত্রে, __raise_exception নামে একটি লাইব্রেরি ফাংশন কল করে ব্যতিক্রমগুলি উত্থাপিত হয় যা নিম্নলিখিত এএনএসআই সি ইন্টারফেসে রয়েছে:
/* addr is where the exception identifier is stored.
id is the exception identifier. */
void __raise_exception (void **addr, void *id);
যেকোন স্ট্যাক আনওয়াইন্ডিংয়ের আগে ডিবাগারটিকে সমস্ত ব্যতিক্রমী করে তুলতে __raise_exception এ একটি ব্রেকপয়েন্ট নির্ধারণ করুন (বিভাগ ব্রেকপয়েন্টস; ওয়াচপয়েন্টস এবং ব্যতিক্রমগুলি দেখুন)।
শর্তাধীন ব্রেকপয়েন্ট সহ (বিভাগ বিরতির শর্তাদি দেখুন) যা আইডির মানের উপর নির্ভর করে, একটি নির্দিষ্ট ব্যতিক্রম উত্থাপিত হলে আপনি আপনার প্রোগ্রামটি থামাতে পারেন। যখন কোনও ব্যতিক্রম সংখ্যা উত্থাপিত হয় তখন আপনি আপনার প্রোগ্রামটি বন্ধ করতে একাধিক শর্তযুক্ত ব্রেকপয়েন্ট ব্যবহার করতে পারেন।
handle SIGUSR1 pass noprint nostop