JDB (Java Debugger) একটি কমান্ড-লাইন ডিবাগিং টুল যা Java অ্যাপ্লিকেশনগুলো ডিবাগ করার জন্য ব্যবহৃত হয়। এটি ডেভেলপারদের কোডে ভুল (bugs) চিহ্নিত এবং ঠিক করতে সহায়তা করে। জাভা ডিবাগিং টুলটির মধ্যে stack trace খুবই গুরুত্বপূর্ণ একটি উপাদান, যা আপনাকে ত্রুটি (error) সংঘটিত হওয়া কোডের অবস্থান এবং গতিরেখা (execution path) সম্পর্কে বিস্তারিত তথ্য দেয়।
JDB ব্যবহার করে আপনি stack trace এক্সেস করতে পারেন এবং কোডের কোন অংশে ত্রুটি ঘটছে তা নির্ধারণ করতে পারেন। এটি ডিবাগিং প্রক্রিয়াটিকে আরও সহজ এবং কার্যকরী করে তোলে।
1. Stack Trace কি?
Stack trace হল একটি ত্রুটি বা এক্সেপশন ঘটলে সেই ত্রুটির স্থান এবং সময় সম্পর্কে বিস্তারিত তথ্য সরবরাহকারী একটি লিস্ট। যখন কোনো এক্সেপশন ঘটে, জাভা একটি স্ট্যাক ট্রেস তৈরি করে যা ত্রুটির ধরন, কোডের কোথায় ত্রুটি ঘটছে, এবং যে কোড এক্সিকিউট হচ্ছিল সেই কোড লাইনের ইনফরমেশন দেয়।
Stack trace সাধারণত নিম্নলিখিত তথ্য ধারণ করে:
- Exception type: যে এক্সেপশনটি ঘটেছে (যেমন
NullPointerException,ArrayIndexOutOfBoundsException)। - Method calls: যে সমস্ত মেথড কল এক্সিকিউট হয়েছিল এবং তাদের অবস্থান।
- Line numbers: যে লাইনে ত্রুটি ঘটেছে তার সঠিক নম্বর।
2. JDB দিয়ে Stack Trace Access করা
JDB এর মাধ্যমে আপনি স্ট্যাক ট্রেস এক্সেস করতে পারেন যখন আপনার কোডে কোনো এক্সেপশন ঘটবে। JDB আপনাকে এই স্ট্যাক ট্রেস দেখতে এবং আপনার কোডের সমস্যাগুলি চিহ্নিত করতে সহায়তা করে।
2.1 JDB ব্যবহার করে Debugging শুরু করা
JDB টুলটি চালু করার জন্য, আপনি আপনার Java অ্যাপ্লিকেশনটি debug mode-এ রান করতে হবে। এর জন্য -agentlib:jdwp ফ্ল্যাগটি ব্যবহার করা হয়:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 YourJavaApplication
এই কমান্ডটি Java অ্যাপ্লিকেশনটি ডিবাগ মোডে চালু করবে, যা JDB টুলের মাধ্যমে কন্ট্রোল করা যাবে।
2.2 JDB Shell চালানো
আপনি JDB সেশনে লগ ইন করার জন্য, নির্দিষ্ট পোর্টে সংযোগ করতে পারেন (যেমন 8000 পোর্ট):
jdb -attach 8000
এর পর আপনি JDB প্রম্পটে অ্যাপ্লিকেশনটি ডিবাগ করার জন্য বিভিন্ন কমান্ড ব্যবহার করতে পারবেন।
2.3 Stack Trace দেখার জন্য Command ব্যবহার করা
JDB-তে যদি কোনো এক্সেপশন ঘটে, তবে আপনি where কমান্ড ব্যবহার করে স্ট্যাক ট্রেস দেখতে পারবেন। এই কমান্ডটি আপনাকে এক্সেপশনের টাইপ এবং কোথায় ঘটছে তার লাইনের সংখ্যা দেখাবে।
(where)
এটি সম্পূর্ণ স্ট্যাক ট্রেস প্রদর্শন করবে, যা আপনাকে বুঝতে সাহায্য করবে কোন মেথডের কলের কারণে ত্রুটি ঘটছে এবং কোডে কীভাবে সেই ত্রুটি হতে পারে।
3. Stack Trace Debugging উদাহরণ
ধরা যাক, আপনি একটি কোডে NullPointerException পাচ্ছেন। আপনার লক্ষ্য হল যেখানে ত্রুটি ঘটছে সেই অংশ চিহ্নিত করা। JDB দিয়ে এটি ডিবাগ করার জন্য নিচের ধাপগুলো অনুসরণ করুন:
Step 1: Java অ্যাপ্লিকেশন ডিবাগ মোডে রান করা
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 YourApplication
Step 2: JDB তে সংযোগ করা
jdb -attach 8000
Step 3: Breakpoint সেট করা
আপনি যে মেথড বা লাইনে স্ট্যাক ট্রেস পেতে চান, সেখানে ব্রেকপয়েন্ট সেট করতে পারেন। উদাহরণস্বরূপ:
stop in YourClass.yourMethod
Step 4: কোড এক্সিকিউট করা
run
যখন NullPointerException ঘটবে, JDB আপনার ব্রেকপয়েন্টে থেমে যাবে এবং আপনি where কমান্ড ব্যবহার করে স্ট্যাক ট্রেস দেখতে পারবেন:
where
এটি আপনাকে ত্রুটির তথ্য এবং মেথড স্ট্যাক ট্রেস দেখাবে, যেমন:
Exception in thread "main" java.lang.NullPointerException
at YourClass.yourMethod(YourClass.java:45)
at YourClass.main(YourClass.java:20)
এখানে আপনি দেখতে পাবেন যে NullPointerException ঘটেছে YourClass.java এর 45 নম্বর লাইনে, এবং কোডের স্ট্যাক ট্রেস আপনাকে কোন মেথডে ত্রুটি ঘটছে তা জানাবে।
4. Stack Trace Debugging Tips
- Stack Trace পড়ুন মনোযোগ দিয়ে: স্ট্যাক ট্রেসের প্রথম লাইনটি সাধারণত প্রধান ত্রুটির (exception) টাইপ এবং সঠিক লাইনের অবস্থান (line number) দেখায়। অন্যান্য লাইনগুলি ঐ এক্সেপশনের কারণে প্রভাবিত হওয়া অন্যান্য মেথডগুলির কল দেখায়।
- Breakpoints ব্যবহার করুন: কোডে কোথাও সমস্যা সন্দেহ হলে, সেই লাইনে ব্রেকপয়েন্ট সেট করুন এবং ডিবাগিং শুরু করুন। ব্রেকপয়েন্ট আপনাকে এক্সেপশন ঘটার আগেই সমস্যা শনাক্ত করতে সাহায্য করবে।
- Method Invocation Check: স্ট্যাক ট্রেসে মেথড কলের লিস্ট দেখে বুঝতে চেষ্টা করুন কোন কলের মাধ্যমে ত্রুটি ছড়িয়ে পড়ছে। যদি একই মেথড একাধিক বার কল হয়ে থাকে, তবে এটি বুঝতে সাহায্য করবে।
সারাংশ
JDB এর মাধ্যমে আপনি সহজেই stack trace এক্সেস করতে পারেন এবং ত্রুটির কারণ সনাক্ত করতে পারেন। জাভা অ্যাপ্লিকেশন ডিবাগ করার জন্য স্ট্যাক ট্রেস একটি অত্যন্ত কার্যকরী টুল, কারণ এটি আপনাকে ত্রুটি বা এক্সেপশন ঘটনার স্থান এবং প্রভাবিত মেথডগুলির তথ্য সরবরাহ করে। where কমান্ডটি ব্যবহার করে আপনি JDB-তে স্ট্যাক ট্রেস দেখতে পারেন, এবং এর মাধ্যমে কোডে সমস্যাগুলি দ্রুত চিহ্নিত করতে পারেন।
Read more