Android Studio একটি ডিবাগার প্রদান করে যা আপনাকে নিম্নলিখিত এবং আরও অনেক কিছু করতে দেয়:
- আপনার অ্যাপ ডিবাগ করার জন্য একটি ডিভাইস বেছে নিন।
- আপনার Java, Kotlin ও C/C++ কোডে ব্রেকপয়েন্ট সেট করুন।
- রানটাইমে ভেরিয়েবল পরীক্ষা করুন এবং এক্সপ্রেশন মূল্যায়ন করুন।
এই পৃষ্ঠায় ডিবাগার সংক্রান্ত প্রাথমিক অপারেশন সম্পর্কে নির্দেশাবলী রয়েছে। আরও ডকুমেন্টেশনের জন্য, IntelliJ IDEA ডিবাগিং ডকুমেন্ট দেখুন।
ডিবাগিং চালু করুন
ডিবাগিং শুরু করার আগে, নিম্নলিখিত কাজগুলি করুন:
- আপনার ডিভাইসে ডিবাগিং চালু করুন।
- আপনি এমুলেটর ব্যবহার করলে, ডিফল্ট হিসেবে ডিবাগিং চালু থাকে। তবে কানেক্ট করা ডিভাইসের জন্য, আপনাকে ডিভাইস ডেভেলপার বিকল্পে ডিবাগিং চালু করতে হবে।
- ডিবাগ করা যায় এমন বিল্ড ভ্যারিয়েন্ট রান করুন।
এমন একটি বিল্ড ভ্যারিয়েন্ট ব্যবহার করুন যা বিল্ড কনফিগারেশনে
debuggable true(Kotlin স্ক্রিপ্টেisDebuggable = true) অন্তর্ভুক্ত করে।সাধারণত, আপনি ডিফল্ট "ডিবাগ" ভেরিয়েন্ট বেছে নিতে পারেন যা প্রতিটি Android Studio প্রজেক্টে অন্তর্ভুক্ত থাকে, যদিও এটি
build.gradleফাইলে দেখা যায় না। তবে, আপনি যদি নতুন বিল্ড টাইপ নির্ধারণ করেন যা ডিবাগ করা যায়, তাহলে আপনাকে অবশ্যই বিল্ড টাইপেdebuggable trueযোগ করতে হবে:- আপনার অ্যাপের কোডে ব্রেকপয়েন্ট সেট করুন।
- টুলবারে, টার্গেট ডিভাইস মেনু থেকে আপনার অ্যাপ ডিবাগ করার জন্য একটি ডিভাইস বেছে নিন।
ছবি ১. টার্গেট ডিভাইস মেনু। আপনার কোনও ডিভাইস কনফিগার করা না থাকলে, আপনাকে হয় USB-এর মাধ্যমে ডিভাইস কানেক্ট করতে হবে, ওয়াই-ফাইয়ের মাধ্যমে ডিভাইস কানেক্ট করতে হবে, অথবা Android Emulator ব্যবহার করার জন্য AVD তৈরি করতে হবে।
- টুলবারে, ডিবাগ করুন
বিকল্পে ক্লিক করুন।
আপনার অ্যাপ ডিভাইসে আগে থেকেই রান করলে, একটি ডায়ালগ দেখানো হয় যেখানে আপনাকে জিজ্ঞাসা করা হয় যে আপনি রান থেকে ডিবাগে পরিবর্তন করতে চান কিনা। ডিবাগিং শুরু করার জন্য ডিভাইস রিস্টার্ট করতে হবে। অ্যাপের একই ইনস্ট্যান্স চালু রাখতে, ডিবাগ বাতিল করুন বিকল্পে ক্লিক করুন এবং এর পরিবর্তে চালু থাকা অ্যাপে ডিবাগার অ্যাটাচ করুন। অন্যথায়, Android Studio একটি APK তৈরি করে, ডিবাগ কী দিয়ে এটি সাইন করে, আপনার বেছে নেওয়া ডিভাইসে এটি ইনস্টল করে এবং রান করে।
আপনি প্রোজেক্টে C এবং C++ কোড যোগ করলে, Android Studio আপনার নেটিভ কোড ডিবাগ করার জন্য ডিবাগ উইন্ডোতে LLDB ডিবাগার রান করে।
- ডিবাগ উইন্ডো খোলা না থাকলে, দেখুন > টুল উইন্ডো > ডিবাগ বিকল্প বেছে নিন,
অথবা টুল উইন্ডো বারে ডিবাগ
বিকল্পে ক্লিক করুন। - Android প্রসেসে ডিবাগার অ্যাটাচ করুন
বিকল্পে ক্লিক করুন।
- প্রসেস বেছে নিন ডায়ালগ থেকে, আপনি যে প্রসেসের সাথে ডিবাগার
অ্যাটাচ করতে চান সেটি বেছে নিন।
- আপনি এমুলেটর বা রুট করা ডিভাইস ব্যবহার করলে, সব প্রসেস দেখতে সব প্রসেস দেখুন বিকল্পে টিকচিহ্ন দিতে পারেন। রুট করা ডিভাইসে, এটি ডিভাইসে চলা সব প্রসেস দেখাবে। তবে, রুট করা হয়নি এমন ডিভাইসে, এটি শুধুমাত্র ডিবাগ করা যাবে এমন প্রসেস দেখাবে।
- এখান থেকে Android ডিবাগার সেটিংস ব্যবহার করুন মেনু থেকে, আপনি আগে থেকে থাকা রান/ডিবাগ কনফিগারেশন বেছে নিতে পারবেন। C এবং C++ কোডের জন্য, এটি আপনাকে LLDB স্টার্টআপ কমান্ড, LLDB পোস্ট-অ্যাটাচ কমান্ড এবং সিম্বল ডিরেক্টরিগুলি একটি বিদ্যমান কনফিগারেশনে পুনরায় ব্যবহার করতে দেয়।
- আপনার আগে থেকে কোনও রান/ডিবাগ কনফিগারেশন না থাকলে, নতুন তৈরি করুন বিকল্প বেছে নিন। এই বিকল্প বেছে নিলে ডিবাগের ধরন মেনু চালু হয়ে যায়, যেখান থেকে আপনি অন্য কোনও ডিবাগের ধরন বেছে নিতে পারবেন। ডিফল্ট হিসেবে, Android Studio, আপনার প্রোজেক্টে Java বা C/C++ কোড আছে কিনা তার উপর ভিত্তি করে আপনার জন্য সেরা ডিবাগার বিকল্প বেছে নিতে, 'অটোমেটিক শনাক্ত করুন' ডিবাগ টাইপ ব্যবহার করে।
- ঠিক আছে বিকল্পে ক্লিক করুন।
ডিবাগ উইন্ডো দেখা যাবে।
- এক্সিকিউশন ও নেভিগেশন টুলবার ব্রেকপয়েন্ট নিয়ে কাজ করা দেখুন
- থ্রেড বাছাইকারী
- মূল্যায়ন এবং এক্সপ্রেশন এন্ট্রি দেখুন। ভেরিয়েবল পরীক্ষা করুন দেখুন।
- স্ট্যাক ডিসপ্লে
- ভেরিয়েবল প্যান। ভেরিয়েবল পরীক্ষা করুন বিকল্প দেখুন।
- অটোমেটিক শনাক্ত করুন
- আপনি যে কোড ডিবাগ করছেন তার জন্য Android Studio-কে অটোমেটিক সেরা বিকল্প বেছে নিতে দিতে চাইলে, এই ডিবাগ টাইপ বেছে নিন। যেমন, আপনার প্রোজেক্টে কোনও C বা C++ কোড থাকলে, Android Studio অটোমেটিক ডুয়াল ডিবাগ টাইপ ব্যবহার করে। অন্যথায়, Android Studio শুধুমাত্র-Java ডিবাগ টাইপ ব্যবহার করে।
- শুধুমাত্র জাভা
- আপনি যদি শুধুমাত্র Java বা Kotlin-এ লেখা কোড ডিবাগ করতে চান, তাহলে এই ডিবাগ টাইপ বেছে নিন। শুধুমাত্র জাভা ডিবাগার আপনার নেটিভ কোডে সেট করা যেকোনও ব্রেকপয়েন্ট বা ওয়াচ উপেক্ষা করে।
- শুধুমাত্র নেটিভ (শুধুমাত্র C/C++ কোডের সাথে উপলভ্য)
-
আপনার কোড ডিবাগ করার জন্য শুধুমাত্র LLDB ব্যবহার করতে চাইলে, এই ডিবাগ টাইপ বেছে নিন। এই ডিবাগ টাইপ ব্যবহার করার সময়, Java ডিবাগার সেশন ভিউ উপলভ্য থাকে না। ডিফল্ট হিসেবে,
LLDB শুধুমাত্র আপনার নেটিভ কোড পরীক্ষা করে এবং আপনার Java কোডে ব্রেকপয়েন্ট
উপেক্ষা করে। আপনি যদি নিজের Java কোডও ডিবাগ করতে চান, তাহলে
অটোমেটিক শনাক্ত করুন বা ডুয়াল ডিবাগ টাইপে পাল্টে নিন।
নেটিভ ডিবাগিং শুধুমাত্র সেইসব ডিভাইসে কাজ করে যেগুলি নিম্নলিখিত প্রয়োজনীয়তা পূরণ করে:
ডিভাইসে
run-asকাজ করে।ডিভাইসটি
run-as-কে সাপোর্ট করে কিনা তা চেক করতে, আপনার ডিভাইসের সাথে কানেক্ট করা ADB শেলে নিম্নলিখিত কমান্ডটি রান করুন:run-as your-package-name pwd
your-package-name-এর জায়গায় আপনার অ্যাপের প্যাকেজের নাম লিখুন। ডিভাইসটিrun-as-এর সাথে কাজ করলে, কমান্ডটি কোনও সমস্যা ছাড়াই রিটার্ন করা উচিত।ডিভাইসে
ptraceচালু করা আছে।ptraceচালু আছে কিনা তা চেক করতে, আপনার ডিভাইসের সাথে কানেক্ট করা ADB শেল-এ নিম্নলিখিত কমান্ড রান করুন:sysctl kernel.yama.ptrace_scope
ptraceচালু করা থাকলে, কমান্ডটি0ভ্যালু বা একটিunknown keyত্রুটি প্রিন্ট করবে।ptraceচালু করা না থাকলে, এটি0ছাড়া অন্য কোনও ভ্যালু প্রিন্ট করবে।
- ডুয়াল (Java + নেটিভ) - শুধুমাত্র C/C++ কোডের সাথে উপলভ্য
-
আপনি যদি জাভা এবং নেটিভ কোড দুটির মধ্যে ডিবাগিং পরিবর্তন করতে চান তাহলে এই ডিবাগ টাইপ বেছে নিন।
Android Studio আপনার অ্যাপ প্রসেসে Java ডিবাগার এবং LLDB, দুটিই অ্যাটাচ করে
যাতে আপনি অ্যাপ রিস্টার্ট না করে
বা ডিবাগ কনফিগারেশন পরিবর্তন না করেই Java এবং নেটিভ কোড, দুটিতেই ব্রেকপয়েন্ট
পরীক্ষা করতে পারেন।
ছবি ২-এ, ডিবাগ উইন্ডো টাইটেলের ডানদিকে দুটি ট্যাব লক্ষ্য করুন। অ্যাপে Java ও C++ কোড, দুটিই আছে বলে, একটি ট্যাব নেটিভ কোড ডিবাগ করার জন্য এবং অন্যটি Java কোড ডিবাগ করার জন্য, যেমন -java দিয়ে দেখানো হয়েছে।
ছবি ৩. নেটিভ কোড ডিবাগ করার জন্য ট্যাব এবং জাভা কোড ডিবাগ করার জন্য ট্যাব। - লাইন ব্রেকপয়েন্ট
- সবচেয়ে সাধারণ ধরন হল লাইন ব্রেকপয়েন্ট যা কোডের নির্দিষ্ট লাইনে আপনার অ্যাপের এক্সিকিউশন পজ করে। পজ করা অবস্থায়, আপনি ভেরিয়েবল পরীক্ষা করতে, এক্সপ্রেশন মূল্যায়ন করতে এবং তারপরে রানটাইম সমস্যার কারণ নির্ধারণ করতে এক এক করে এক্সিকিউশন লাইন চালিয়ে যেতে পারবেন।
- মেথড ব্রেকপয়েন্ট
- কোনও মেথড ব্রেকপয়েন্ট আপনার অ্যাপের এক্সিকিউশনকে পজ করে দেয় যখন এটি কোনও নির্দিষ্ট মেথডে প্রবেশ করে বা বেরিয়ে আসে। পজ করা অবস্থায়, আপনি ভেরিয়েবল পরীক্ষা করতে, এক্সপ্রেশন মূল্যায়ন করতে এবং তারপরে রানটাইম সমস্যার কারণ নির্ধারণ করতে এক এক করে এক্সিকিউশন লাইন চালিয়ে যেতে পারবেন। আপনি কম্পোজেবল ফাংশনে ব্রেকপয়েন্ট সেট করলে, ডিবাগার কম্পোজেবলের প্যারামিটার ও তাদের স্ট্যাটাস তালিকাভুক্ত করে যাতে কোন পরিবর্তনের কারণে রিকম্পোজিশন হয়েছে তা শনাক্ত করতে সাহায্য করা যায়।
- ফিল্ড ব্রেকপয়েন্ট
- কোনও ফিল্ড ব্রেকপয়েন্ট আপনার অ্যাপের এক্সিকিউশন পজ করে দেয় যখন এটি কোনও নির্দিষ্ট ফিল্ড থেকে রিড বা রাইট করে।
- ব্যতিক্রম ব্রেকপয়েন্ট
- কোনও এক্সেপশন থ্রো করা হলে, এক্সেপশন ব্রেকপয়েন্ট আপনার অ্যাপের এক্সিকিউশন পজ করে দেয়।
- কোডের যে লাইনে এক্সিকিউশন পজ করতে চান সেটি খুঁজে নিন।
- কোডের সেই লাইনের পাশে বাঁদিকের গাটারে ক্লিক করুন অথবা লাইনে ক্যারেট রাখুন এবং Control+F8 (macOS-এ, Command+F8) প্রেস করুন।
- আপনার অ্যাপ আগে থেকেই রান করলে, Android প্রসেসে ডিবাগার অ্যাটাচ করুন
বিকল্পে ক্লিক করুন। অন্যথায়, ডিবাগিং শুরু করতে, ডিবাগ করুন
বিকল্পে ক্লিক করুন।
-
কোনও ভেরিয়েবলের জন্য অবজেক্ট ট্রি পরীক্ষা করতে, ভেরিয়েবল ভিউতে এটি বড় করুন। যদি ভেরিয়েবল ভিউ দেখা না যায়, তাহলে লেআউট সেটিংস
বিকল্পে ক্লিক করুন এবং নিশ্চিত করুন যে
ভেরিয়েবল বিকল্পে টিকচিহ্ন দেওয়া আছে।
-
কোনও পদ্ধতি না লিখে কোডের পরবর্তী লাইনে যেতে, স্টেপ ওভার
বিকল্পে ক্লিক করুন। -
মেথড কলের মধ্যে প্রথম লাইনে যেতে, স্টেপ ইনটু
বিকল্পে ক্লিক করুন। -
বর্তমান মেথডের বাইরে পরবর্তী লাইনে যেতে, স্টেপ আউট
বিকল্পে ক্লিক করুন। -
অ্যাপটি স্বাভাবিকভাবে চালানো চালিয়ে যেতে, প্রোগ্রাম আবার চালু করুন
বিকল্পে ক্লিক করুন। - LLDB ডিবাগার আপনার C/C++ কোডে ব্রেকপয়েন্ট খুঁজে পেলে,
Android Studio
<your-module> ট্যাবে পাল্টে যায়। ফ্রেম, ভেরিয়েবল ও
ওয়াচ প্যানও উপলভ্য এবং আপনি Java কোড ডিবাগ করলে
এগুলি যেভাবে কাজ করে ঠিক সেভাবেই কাজ করে।
LLDB সেশন ভিউতে থ্রেড প্যানেল উপলভ্য না থাকলেও, আপনি ফ্রেম প্যানেলের তালিকা ব্যবহার করে অ্যাপ প্রসেস অ্যাক্সেস করতে পারবেন। উইন্ডো ফ্রেম ডিবাগ করা এবং ভেরিয়েবল পরীক্ষা করা সংক্রান্ত বিভাগে এইসব প্যানেল সম্পর্কে আরও জানুন।
মনে রাখবেন: আপনার নেটিভ কোডে ব্রেকপয়েন্ট পরীক্ষা করার সময়, Android সিস্টেম ভার্চুয়াল মেশিন সাসপেন্ড করে দেয় যা আপনার অ্যাপের Java বাইটকোড রান করে। এর অর্থ হল, আপনার নেটিভ কোডে ব্রেকপয়েন্ট পরীক্ষা করার সময় আপনি Java ডিবাগার সেশন থেকে কোনও স্টেট তথ্য ফিরিয়ে আনতে বা Java ডিবাগারের সাথে ইন্টার্যাক্ট করতে পারবেন না।
- Java বা Kotlin কোডে Java ডিবাগার ব্রেকপয়েন্ট পেলে, Android Studio <your-module>-java ট্যাবে পাল্টে যায়।
- LLDB-এর মাধ্যমে ডিবাগ করার সময়, আপনি LLDB সেশন ভিউতে LLDB টার্মিনাল ব্যবহার করে LLDB-তে কমান্ড-লাইন বিকল্প পাস করতে পারবেন। আপনার অ্যাপ ডিবাগ করা শুরু করার সময়, ডিবাগার আপনার অ্যাপ প্রসেসের সাথে অ্যাটাচ হওয়ার ঠিক আগে বা পরে, আপনি যদি চান যে LLDB প্রতিবার নির্দিষ্ট কিছু কমান্ড এক্সিকিউট করুক, তাহলে আপনি আপনার ডিবাগ কনফিগারেশনে সেইসব কমান্ড যোগ করতে পারেন।
- দেখতে বা ডিসপ্লে করতে এক্সপ্রেশন লিখুন
- এক্সপ্রেশন একবার মূল্যায়ন করতে, ওয়াচে যোগ করুন বিকল্পে ক্লিক করুন বা Enter প্রেস করুন।
- আপনার টার্গেট ফিজিক্যাল ডিভাইস বা এমুলেটর x86 বা x86_64 CPU ব্যবহার করে। আপনার
ডিভাইস ARM CPU ব্যবহার করলে, আপনাকে মেমরিতে ভেরিয়েবলের অ্যাড্রেসের বাউন্ডারি
৩২-বিট প্রসেসরের জন্য ৪ বাইট অথবা ৬৪-বিট প্রসেসরের জন্য ৮ বাইটে
অ্যালাইন করতে হবে। আপনার নেটিভ কোডে কোনও ভেরিয়েবল অ্যালাইন করতে, ভেরিয়েবল ডিক্লারেশনে
__attribute__((aligned(num_bytes)))উল্লেখ করুন, যেমন নিচে দেখানো হয়েছে:// For a 64-bit ARM processor int my_counter __attribute__((aligned(8)));
- আপনি ইতিমধ্যেই তিনটি বা তার কম ওয়াচপয়েন্ট অ্যাসাইন করেছেন। Android Studio শুধুমাত্র x86 বা x86_64 টার্গেট ডিভাইসে চারটি পর্যন্ত ওয়াচপয়েন্ট সাপোর্ট করে। অন্যান্য ডিভাইসে কম ওয়াচপয়েন্ট কাজ করতে পারে।
- ব্রেকপয়েন্টে আপনার অ্যাপ সাসপেন্ড করা থাকলে, আপনার LLDB সেশন ভিউতে ভেরিয়েবল প্যানে নেভিগেট করুন।
-
আপনি ট্র্যাক করতে চান এমন মেমরি ব্লক দখল করে থাকা ভেরিয়েবলের উপর ডানদিকের বোতামে ক্লিক করুন এবং ওয়াচপয়েন্ট যোগ করুন বিকল্প বেছে নিন।
ছবি ৯. মেমরিতে কোনও ভেরিয়েবলে ওয়াচপয়েন্ট যোগ করুন। ছবি ৯-এ যেমন দেখানো হয়েছে, আপনার ওয়াচপয়েন্ট কনফিগার করার জন্য একটি ডায়ালগ দেখানো হয়।
নিম্নলিখিত বিকল্পের সাহায্যে আপনার ওয়াচপয়েন্ট কনফিগার করুন:
- চালু করা আছে: আপনি সেটিং পরিবর্তন না করা পর্যন্ত Android Studio-কে ওয়াচপয়েন্ট উপেক্ষা করতে বলতে চাইলে, এই বিকল্প থেকে টিকচিহ্ন সরিয়ে দিন। Android Studio আপনার ওয়াচপয়েন্ট সেভ করে যাতে আপনি পরে এটি অ্যাক্সেস করতে পারেন।
- সাসপেন্ড: ডিফল্ট হিসেবে, Android সিস্টেম আপনার অ্যাপ প্রসেস সাসপেন্ড করে দেয় যখন এটি আপনার ওয়াচপয়েন্টে অ্যাসাইন করা মেমরি ব্লক অ্যাক্সেস করে। আপনি এই আচরণ না চাইলে, এই বিকল্প থেকে টিকচিহ্ন সরিয়ে দিন। এটি অতিরিক্ত বিকল্প দেখায় যা আপনি সিস্টেম আপনার ওয়াচপয়েন্টের সাথে ইন্টার্যাক্ট করার সময় আচরণ কাস্টমাইজ করতে ব্যবহার করতে পারেন: কনসোলে মেসেজ লগ করুন এবং হিট করার সময় সরান।
- অ্যাক্সেসের ধরন: আপনার অ্যাপ যখন ভেরিয়েবলের জন্য সিস্টেমের বরাদ্দ করা মেমরি ব্লকে রিড বা রাইট করার চেষ্টা করবে, তখন আপনার ওয়াচপয়েন্ট ট্রিগার করা উচিত কিনা তা বেছে নিন। রিড বা রাইট, যেকোনও একটির ক্ষেত্রে ওয়াচপয়েন্ট ট্রিগার করতে, যেকোনও বিকল্প বেছে নিন।
- হয়ে গেছে বিকল্পে ক্লিক করুন।
- ভেরিয়েবেল তালিকায়, রিসোর্স লাইনের যেকোনও জায়গায় মাউসের ডানদিকের বোতামে ক্লিক করে তালিকাটি দেখুন।
- তালিকা থেকে, এইভাবে দেখুন বিকল্প বেছে নিন এবং আপনি যে ফর্ম্যাট ব্যবহার করতে চান সেটি বেছে নিন।
আপনার বেছে নেওয়া রিসোর্সের ডেটার ধরনের উপর উপলভ্য ফর্ম্যাট নির্ভর করে। আপনি নিম্নলিখিত বিকল্পগুলির মধ্যে এক বা একাধিক দেখতে পেতে পারেন:
- ক্লাস: ক্লাসের সংজ্ঞা দেখান।
- toString: স্ট্রিং ফর্ম্যাট দেখান।
- অবজেক্ট: অবজেক্টের (কোনও ক্লাসের ইনস্ট্যান্স) সংজ্ঞা দেখায়।
- অ্যারে: অ্যারে ফর্ম্যাটে দেখুন।
- টাইমস্ট্যাম্প: এইভাবে তারিখ ও সময় দেখান: yyyy-mm-dd hh:mm:ss.
- অটোমেটিক: ডেটার ধরনের উপর ভিত্তি করে Android Studio সেরা ফর্ম্যাট বেছে নেয়।
- বাইনারি: শূন্য ও এক ব্যবহার করে বাইনারি ভ্যালু দেখান।
- MeasureSpec: পেরেন্ট থেকে বেছে নেওয়া চাইল্ডে পাস করা ভ্যালু।
MeasureSpecদেখুন। - হেক্স: হেক্সাডেসিমেল ভ্যালু হিসেবে দেখান।
- প্রিমিটিভ: প্রিমিটিভ ডেটার ধরন ব্যবহার করে সংখ্যাসূচক মান হিসেবে দেখান।
- পূর্ণসংখ্যা:
Integerধরনের সংখ্যাসূচক মান হিসেবে দেখানো হয়।
- রিসোর্স ভ্যালুর উপর মাউস রেখে ডানদিকের বোতামে ক্লিক করুন।
- এইভাবে দেখুন বিকল্প বেছে নিন।
- তৈরি করুন বিকল্প বেছে নিন।
- Java ডেটা টাইপ রেন্ডারার ডায়ালগ দেখা যায়। Java ডেটা টাইপ রেন্ডারার-এ দেওয়া নির্দেশাবলী অনুসরণ করুন।
গ্ৰুভি
android { buildTypes { customDebugType { debuggable true ... } } }
Kotlin
android { buildTypes { create("customDebugType") { isDebuggable = true ... } } }
এই প্রপার্টি C/C++ কোড সহ মডিউলের ক্ষেত্রেও প্রযোজ্য।
মনে রাখবেন:
jniDebuggable প্রপার্টি আর ব্যবহার করা হয় না।
আপনার অ্যাপ যদি এমন কোনও লাইব্রেরি মডিউলের উপর নির্ভর করে যা আপনি ডিবাগ করতে চান, তাহলে সেই লাইব্রেরিও
debuggable true-এর সাথে প্যাকেজ করতে হবে যাতে এটি ডিবাগ চিহ্ন ধরে রাখে।
আপনার অ্যাপ প্রোজেক্টের ডিবাগ করা যায় এমন ভেরিয়েন্ট যাতে লাইব্রেরি মডিউলের ডিবাগ করা যায় এমন ভেরিয়েন্ট পায় তা নিশ্চিত করতে, আপনার লাইব্রেরির ডিফল্ট নয় এমন ভার্সন প্রকাশ করুন।
ডিবাগিং শুরু করুন
আপনি নিম্নলিখিত উপায়ে ডিবাগিং সেশন শুরু করতে পারবেন:
চলমান অ্যাপে ডিবাগার অ্যাটাচ করুন
আপনার ডিভাইসে অ্যাপটি আগে থেকেই চলতে থাকলে, আপনি অ্যাপটি রিস্টার্ট না করেই নিম্নলিখিত উপায়ে ডিবাগিং শুরু করতে পারেন:
এছাড়াও, ডিভাইস এক্সপ্লোরারের (View > টুল উইন্ডো > ডিভাইস এক্সপ্লোরার) প্রসেস ট্যাবে
ডিবাগ করা যাবে এমন প্রসেসের তালিকা থাকে। সেখান থেকে আপনি কোনও প্রসেস বেছে নিতে এবং কিল
,
জোর করে বন্ধ করা
,
অথবা প্রদত্ত প্রসেসে ডিবাগার অ্যাটাচ করতে পারবেন
।
ডিবাগ উইন্ডো
ডিবাগ উইন্ডোকে নিম্নলিখিত ভাগে ভাগ করা হয়েছে
মনে রাখবেন: Android Studio ডিবাগার ও গার্বেজ কালেক্টর
লুজলি ইন্টিগ্রেট করা থাকে। Android ভার্চুয়াল মেশিন গ্যারেন্টি দেয় যে ডিবাগার ডিসকানেক্ট না হওয়া পর্যন্ত
ডিবাগার জানে এমন কোনও অবজেক্ট
গার্বেজ কালেক্ট করা হয় না। এর ফলে ডিবাগার কানেক্ট করা থাকাকালীন অবজেক্টের
বিল্ডআপ হতে পারে। যেমন, ডিবাগার যদি কোনও চলমান থ্রেড দেখতে পায়,
তাহলে ডিবাগার ডিসকানেক্ট না হওয়া পর্যন্ত সংশ্লিষ্ট Thread
অবজেক্টটি গার্বেজ কালেক্টেড হয় না, এমনকি থ্রেডটি বন্ধ হয়ে গেলেও।
ডিবাগারের ধরন পরিবর্তন করুন
Java/Kotlin কোড এবং C/C++ কোড ডিবাগ করার জন্য বিভিন্ন ডিবাগার টুল প্রয়োজন, তাই Android Studio ডিবাগার আপনাকে কোন ডিবাগার টাইপ ব্যবহার করতে হবে তা বেছে নিতে দেয়। ডিফল্ট হিসেবে, Android Studio অটোমেটিক শনাক্ত করুন ডিবাগার টাইপ ব্যবহার করে আপনার প্রোজেক্টে কোন ভাষা শনাক্ত করা হয়েছে তার উপর ভিত্তি করে কোন ডিবাগার ব্যবহার করা হবে তা ঠিক করে।
ডিবাগ কনফিগারেশনে ম্যানুয়ালি ডিবাগার বেছে নিতে, রান করুন > কনফিগারেশন এডিট করুন বিকল্পে ক্লিক করুন। এছাড়াও, আপনি রান করুন > Android প্রসেসে ডিবাগার অ্যাটাচ করুন বিকল্পে ক্লিক করলে যে ডায়ালগ বক্স দেখানো হয়, সেখানে ডিবাগার বেছে নিতে পারবেন।
উপলভ্য ডিবাগ প্রকারের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:
মনে রাখবেন: কম্পাইলারের মাধ্যমে অপ্টিমাইজ করা নেটিভ কোড ডিবাগ করার সময়, আপনি নিম্নলিখিত সতর্কতামূলক মেসেজ পেতে পারেন:This function was
compiled with optimizations enabled. Some debugger features may not be
available। অপ্টিমাইজেশন ফ্ল্যাগ ব্যবহার করার সময়, কম্পাইলার আপনার কম্পাইল করা কোডে পরিবর্তন করে
যাতে এটি আরও দক্ষতার সাথে রান করে। এর ফলে ডিবাগার অপ্রত্যাশিত বা ভুল তথ্য
রিপোর্ট করতে পারে কারণ ডিবাগারের পক্ষে অপ্টিমাইজ করা কম্পাইল করা কোডকে মূল সোর্স কোডে
ম্যাপ করা কঠিন।
এই কারণে, আপনার নেটিভ কোড ডিবাগ করার সময়
কম্পাইলার অপ্টিমাইজেশন বন্ধ করে দেওয়া উচিত।
সিস্টেম লগ ব্যবহার করা
আপনার অ্যাপ ডিবাগ করার সময় সিস্টেম লগ সিস্টেম মেসেজ দেখায়। এইসব মেসেজে ডিভাইসে চলা অ্যাপ থেকে পাওয়া তথ্য থাকে। আপনার অ্যাপ ডিবাগ করার জন্য সিস্টেম লগ ব্যবহার করতে চাইলে, অ্যাপ ডেভেলপমেন্টের পর্যায়ে থাকাকালীন আপনার কোড যাতে লগ মেসেজ লেখে এবং ব্যতিক্রমের জন্য স্ট্যাক ট্রেস প্রিন্ট করে তা নিশ্চিত করুন।
আপনার কোডে লগ মেসেজ লিখুন
আপনার কোডে লগ মেসেজ লিখতে,
Log ক্লাস ব্যবহার করুন। আপনার অ্যাপের সাথে ইন্টার্যাক্ট করার সময়
সিস্টেম ডিবাগ আউটপুট সংগ্রহ করে লগ মেসেজ আপনাকে এক্সিকিউশন ফ্লো বুঝতে
সাহায্য করে। লগ মেসেজ থেকে আপনি অ্যাপের কোন অংশ কাজ করেনি তাও জানতে পারবেন। লগিং সম্পর্কে আরও তথ্যের জন্য, Logcat-এর মাধ্যমে লগ লিখুন ও দেখুন।
আপনার অ্যাক্টিভিটি শুরু হওয়ার সময় আগের স্টেট সংক্রান্ত তথ্য উপলভ্য আছে কিনা তা নির্ধারণ করতে, আপনি কীভাবে লগ মেসেজ যোগ করতে পারেন তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
Kotlin
import android.util.Log ... class MyActivity : Activity() { ... override fun onCreate(savedInstanceState: Bundle?) { ... if (savedInstanceState != null) { Log.d(TAG, "onCreate() Restoring previous state") /* restore state */ } else { Log.d(TAG, "onCreate() No saved state available") /* initialize app */ } ... } ... companion object { private val TAG: String = MyActivity::class.java.simpleName ... } }
জাভা
import android.util.Log; ... public class MyActivity extends Activity { private static final String TAG = MyActivity.class.getSimpleName(); ... @Override public void onCreate(Bundle savedInstanceState) { ... if (savedInstanceState != null) { Log.d(TAG, "onCreate() Restoring previous state"); /* restore state */ } else { Log.d(TAG, "onCreate() No saved state available"); /* initialize app */ } ... } }
ডেভেলপমেন্টের সময়, আপনার কোড ব্যতিক্রমও ধরতে পারে এবং সিস্টেম লগে স্ট্যাক ট্রেস লিখতে পারে:
Kotlin
fun someOtherMethod() { try { ... } catch (e : SomeException) { Log.d(TAG, "someOtherMethod()", e) } }
জাভা
void someOtherMethod() { try { ... } catch (SomeException e) { Log.d(TAG, "someOtherMethod()", e); } }
মনে রাখবেন: আপনার অ্যাপ প্রকাশ করার জন্য প্রস্তুত হলে, আপনার কোড থেকে ডিবাগ লগ মেসেজ এবং স্ট্যাক ট্রেস প্রিন্ট কল সরান। এটি করতে, একটি DEBUG
ফ্ল্যাগ সেট করুন এবং শর্তসাপেক্ষ স্টেটমেন্টের মধ্যে ডিবাগ লগ মেসেজ রাখুন।
সিস্টেম লগ দেখুন
আপনি Logcat উইন্ডোতে ডিবাগ এবং অন্যান্য সিস্টেম মেসেজ দেখতে এবং ফিল্টার করতে পারেন, যেমনটি
ছবি ৪-এ দেখানো হয়েছে। যেমন, গার্বেজ কালেকশন হলে আপনি মেসেজ দেখতে পাবেন অথবা
Log ক্লাস ব্যবহার করে
আপনার অ্যাপে যোগ করা মেসেজ দেখতে পাবেন।
Logcat ব্যবহার করতে, ডিবাগিং শুরু করুন এবং Logcat ট্যাব বেছে নিন।
Logcat এবং এর ফিল্টারিং বিকল্পের বিবরণের জন্য, Logcat-এর মাধ্যমে লগ লিখুন এবং দেখুন।
ব্রেকপয়েন্ট নিয়ে কাজ করা
Android Studio-তে ব্রেকপয়েন্ট কাজ করে যা বিভিন্ন ডিবাগিং অ্যাকশন ট্রিগার করে। কয়েক ধরনের ব্রেকপয়েন্ট আছে:
আপনি শর্তসাপেক্ষ ব্রেকপয়েন্ট সেট করতে পারেন যা নির্দিষ্ট শর্ত পূরণ হলে তবেই এক্সিকিউশন সাসপেন্ড করবে। এছাড়াও, আপনি লগিং ব্রেকপয়েন্ট সেট করতে পারেন যা এক্সিকিউশন সাসপেন্ড না করেই Logcat-এ লেখে। এটি আপনার কোডকে লগ স্টেটমেন্টের মাধ্যমে বিশৃঙ্খল হওয়া থেকে বাঁচাতে সাহায্য করতে পারে।
লাইন ব্রেকপয়েন্ট যোগ করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
আপনি ব্রেকপয়েন্ট সেট করলে, লাইনের পাশে একটি লাল ডট দেখা যায়, যেমনটি ছবি ৫-এ দেখানো হয়েছে।
আপনার কোড এক্সিকিউশন ব্রেকপয়েন্টে পৌঁছালে, Android Studio আপনার অ্যাপের এক্সিকিউশন পজ করে দেয়।
অ্যাপের স্ট্যাটাস শনাক্ত করতে, ডিবাগার ট্যাবে টুল ব্যবহার করুন:
আপনার প্রোজেক্ট কোনও নেটিভ কোড ব্যবহার করলে, ডিফল্ট হিসেবে 'অটোমেটিক শনাক্ত করুন' ডিবাগ টাইপ Java ডিবাগার এবং LLDB, দুটিকেই আপনার অ্যাপে দুটি আলাদা প্রসেস হিসেবে অ্যাটাচ করে। আপনার অ্যাপ রিস্টার্ট না করে বা সেটিংস পরিবর্তন না করেই আপনি Java এবং C/C++ ব্রেকপয়েন্ট পরীক্ষা করার মধ্যে পরিবর্তন করতে পারবেন।
মনে রাখবেন: Android Studio যাতে আপনার C বা C++ কোডে ব্রেকপয়েন্ট শনাক্ত করতে পারে, তার জন্য আপনাকে এমন ডিবাগ টাইপ ব্যবহার করতে হবে যা LLDB-কে সাপোর্ট করে, যেমন অটোমেটিক শনাক্ত করা, নেটিভ বা ডুয়াল। আপনার ডিবাগ কনফিগারেশন এডিট করে Android Studio-তে ব্যবহৃত ডিবাগের ধরন পরিবর্তন করতে পারবেন। বিভিন্ন ডিবাগ টাইপ সম্পর্কে আরও জানতে, অন্যান্য ডিবাগ টাইপ ব্যবহার করা সম্পর্কিত বিভাগটি পড়ুন।
Android Studio আপনার টার্গেট ডিভাইসে অ্যাপ ডেপ্লয় করলে, প্রতিটি ডিবাগার প্রসেসের জন্য ট্যাব বা ডিবাগ সেশন ভিউ সহ ডিবাগ উইন্ডো খোলে, যেমনটি ছবি ৬-এ দেখানো হয়েছে।
C/C++ কোড ডিবাগ করার সময়, আপনি বিশেষ ধরনের ব্রেকপয়েন্টও সেট করতে পারেন, যাকে ওয়াচপয়েন্ট বলা হয়, যা আপনার অ্যাপ মেমরির কোনও নির্দিষ্ট ব্লকের সাথে ইন্টার্যাক্ট করার সময় অ্যাপ প্রসেস সাসপেন্ড করতে পারে। আরও জানতে, কীভাবে ওয়াচপয়েন্ট যোগ করবেন সেই সম্পর্কিত বিভাগটি পড়ুন।
ব্রেকপয়েন্ট দেখুন ও কনফিগার করুন
সব ব্রেকপয়েন্ট দেখতে এবং ব্রেকপয়েন্ট সেটিংস কনফিগার করতে, ব্রেকপয়েন্ট দেখুন
বিকল্পে ক্লিক করুন। এটি
ডিবাগ উইন্ডোতে রয়েছে। ব্রেকপয়েন্ট উইন্ডো দেখা যাবে,
যেমনটি ছবি ৭-এ দেখানো হয়েছে।
ব্রেকপয়েন্ট উইন্ডো আপনাকে প্যানে থাকা তালিকা থেকে প্রতিটি ব্রেকপয়েন্ট চালু বা বন্ধ করতে দেয়। কোনও ব্রেকপয়েন্ট বন্ধ করা থাকলে, Android Studio আপনার অ্যাপকে সেই ব্রেকপয়েন্টে পৌঁছানোর সময় পজ করে না।
সেটিংস কনফিগার করতে তালিকা থেকে ব্রেকপয়েন্ট বেছে নিন। আপনি প্রথমে বন্ধ করার জন্য একটি ব্রেকপয়েন্ট কনফিগার করতে পারেন এবং অন্য একটি ব্রেকপয়েন্ট হিট করার পরে সিস্টেমকে এটি চালু করতে দিতে পারেন। এছাড়াও, আপনি কনফিগার করতে পারেন যে কোনও ব্রেকপয়েন্ট হিট করার পরে সেটি বন্ধ করা উচিত কিনা। কোনও এক্সেপশনের জন্য ব্রেকপয়েন্ট সেট করতে, ব্রেকপয়েন্টের তালিকা থেকে এক্সেপশন ব্রেকপয়েন্ট বিকল্প বেছে নিন।
সাময়িকভাবে সব ব্রেকপয়েন্ট বন্ধ করতে, ডিবাগ উইন্ডোতে ব্রেকপয়েন্ট মিউট করুন
বিকল্পে ক্লিক করুন। আবার চালু করতে ক্লিক করুন।
উইন্ডো ফ্রেম ডিবাগ করুন
ডিবাগার উইন্ডোতে, ফ্রেম প্যানে আপনি সেই স্ট্যাক ফ্রেমটি পরীক্ষা করতে পারেন যার কারণে বর্তমান ব্রেকপয়েন্টটি হিট হয়েছে। এটি আপনাকে স্ট্যাক ফ্রেম নেভিগেট ও পরীক্ষা করতে এবং আপনার Android অ্যাপে থ্রেডের তালিকা পরীক্ষা করতে দেয়।
থ্রেড বেছে নিতে, থ্রেড সিলেক্টর মেনু ব্যবহার করুন এবং এর স্ট্যাক ফ্রেম দেখুন। এডিটরে সোর্স খুলতে ফ্রেমের এলিমেন্টে ক্লিক করুন। এছাড়াও, আপনি থ্রেড প্রেজেন্টেশন কাস্টমাইজ করতে এবং ফ্রেম পরীক্ষা করার নির্দেশিকা-তে আলোচনা করা স্ট্যাক ফ্রেম এক্সপোর্ট করতে পারবেন।
ভেরিয়েবেল পরীক্ষা করুন
ডিবাগার উইন্ডোতে, ভেরিয়েবল প্যানে আপনি ভেরিয়েবল পরীক্ষা করতে পারবেন, যখন সিস্টেম আপনার অ্যাপকে ব্রেকপয়েন্টে থামিয়ে দেয় এবং আপনি ফ্রেম প্যান থেকে ফ্রেম বেছে নেন। এছাড়াও, ভেরিয়েবল প্যানে আপনাকে বেছে নেওয়া ফ্রেমের মধ্যে উপলভ্য স্ট্যাটিক পদ্ধতি এবং/অথবা ভেরিয়েবল ব্যবহার করে অ্যাড হক এক্সপ্রেশন মূল্যায়ন করতে দেয়।
অবজেক্ট ট্রিতে এক্সপ্রেশন যোগ করতে (অ্যাপ্লিকেশন ডিবাগ করার সময়):
অন্যথায়, অবজেক্ট ট্রিতে আপনি যে এক্সপ্রেশন দেখতে চান সেটি থাকলে, আপনি সেটি ট্রির সবচেয়ে উপরে টেনে এনে 'দেখা হয়েছে' এক্সপ্রেশন হিসেবে যোগ করতে পারবেন।
ব্রেকপয়েন্ট হিট হলে বা আপনি কোডের মাধ্যমে স্টেপ করলে, দেখা এক্সপ্রেশন আপডেট হবে।
আপনি ম্যানুয়ালি অন্য এক্সপ্রেশন মূল্যায়ন না করা বা আপনার কোডের মাধ্যমে স্টেপ থ্রু না করা পর্যন্ত অবজেক্ট ট্রির উপরে মূল্যায়ন করা এক্সপ্রেশন দেখানো হবে।
অবজেক্ট ট্রি থেকে দেখা এক্সপ্রেশন সরাতে, এক্সপ্রেশনের উপর মাউস নিয়ে গিয়ে ডানদিকের বোতামে ক্লিক করুন এবং তারপরে দেখা সরান বিকল্পে ক্লিক করুন।
ওয়াচপয়েন্ট যোগ করুন
C/C++ কোড ডিবাগ করার সময়, আপনি বিশেষ ধরনের ব্রেকপয়েন্ট সেট করতে পারেন, যাকে ওয়াচপয়েন্ট বলা হয়, যা আপনার অ্যাপ মেমরির কোনও নির্দিষ্ট ব্লকের সাথে ইন্টার্যাক্ট করার সময় অ্যাপ প্রসেস সাসপেন্ড করতে পারে। যেমন, আপনি মেমরির কোনও ব্লকে দুটি পয়েন্টার সেট করে তাতে ওয়াচপয়েন্ট অ্যাসাইন করলে, মেমরির সেই ব্লক অ্যাক্সেস করার জন্য যেকোনও পয়েন্টার ব্যবহার করলে ওয়াচপয়েন্ট ট্রিগার হয়।
Android Studio-তে, আপনি রানটাইমের সময় নির্দিষ্ট ভেরিয়েবল বেছে নিয়ে ওয়াচপয়েন্ট তৈরি করতে পারবেন, তবে LLDB ওয়াচপয়েন্টকে শুধুমাত্র মেমরির সেই ব্লকে অ্যাসাইন করে যা সিস্টেম সেই ভেরিয়েবলের জন্য বরাদ্দ করে, ভেরিয়েবলে নয়। এটি 'ওয়াচ' প্যানে ভেরিয়েবেল যোগ করার থেকে আলাদা, যা আপনাকে ভেরিয়েবেলের মান দেখতে দেয় কিন্তু সিস্টেম মেমরিতে এর মান পড়লে বা পরিবর্তন করলে আপনার অ্যাপ প্রসেস সাসপেন্ড করতে দেয় না।
মনে রাখবেন: আপনার অ্যাপ প্রসেস কোনও ফাংশন থেকে বেরিয়ে এলে এবং সিস্টেম মেমরি থেকে এর লোকাল ভেরিয়েবল ডিলোক্যাট করলে, আপনাকে সেইসব ভেরিয়েবলের জন্য তৈরি করা যেকোনও ওয়াচপয়েন্ট আবার অ্যাসাইন করতে হবে।
ওয়াচপয়েন্ট সেট করতে, আপনাকে নিম্নলিখিত প্রয়োজনীয়তা পূরণ করতে হবে:
মনে রাখবেন: ৩২-বিট ARM ABI-এর মাধ্যমে আপনার অ্যাপ ডিবাগ করার সময়, ওয়াচপয়েন্ট যোগ করা অথবা কোডের মধ্যে ভেরিয়েবলের উপর হোভার করে সেগুলির ভ্যালু ইনভেস্টিগেট করার সময় ক্র্যাশ হতে পারে। বিকল্প হিসেবে, 64-বিট ARM, x86 বা x86_64 বাইনারি ব্যবহার করে ডিবাগ করুন। Android Studio-এর আসন্ন রিলিজে এই সমস্যার সমাধান করা হবে।
আপনি প্রয়োজনীয়তা পূরণ করলে, নিম্নলিখিত উপায়ে ওয়াচপয়েন্ট যোগ করতে পারবেন:
আপনার সব ওয়াচপয়েন্ট দেখতে এবং ওয়াচপয়েন্ট সেটিংস কনফিগার করতে, ডিবাগ উইন্ডোতে ব্রেকপয়েন্ট দেখুন
বিকল্পে ক্লিক করুন। ছবি ১০-এ যেমন দেখানো হয়েছে, ব্রেকপয়েন্ট ডায়ালগটি দেখা যাবে।
আপনার ওয়াচপয়েন্ট যোগ করার পরে, অ্যাপ প্রসেস আবার শুরু করতে
ডিবাগ উইন্ডোতে প্রোগ্রাম আবার শুরু করুন
বিকল্পে ক্লিক করুন। ডিফল্ট হিসেবে, আপনার অ্যাপ যদি মেমরির এমন কোনও ব্লক অ্যাক্সেস করার চেষ্টা করে যেখানে আপনি
ওয়াচপয়েন্ট সেট করেছেন, তাহলে Android সিস্টেম আপনার অ্যাপ প্রসেস সাসপেন্ড করে দেয় এবং
আপনার অ্যাপের শেষবার এক্সিকিউট করা কোডের লাইনের পাশে একটি ওয়াচপয়েন্ট আইকন
দেখানো হয়, যেমনটি ছবি ১১-এ দেখানো হয়েছে।
রিসোর্স ভ্যালু ডিসপ্লে ফর্ম্যাট দেখুন ও পরিবর্তন করুন
ডিবাগ মোডে, আপনি রিসোর্স ভ্যালু দেখতে এবং আপনার Java বা Kotlin কোডে ভেরিয়েবলের জন্য অন্য ডিসপ্লে ফর্ম্যাট বেছে নিতে পারবেন। ভেরিয়েবেল ট্যাব দেখানো এবং ফ্রেম বেছে নেওয়ার পরে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
কাস্টম ফর্ম্যাট তৈরি করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন: