আপনার অ্যাপ ডিবাগ করুন

অ্যান্ড্রয়েড স্টুডিও একটি ডিবাগার প্রদান করে যা আপনাকে নিম্নলিখিত এবং আরও অনেক কিছু করতে দেয়:

  • আপনার অ্যাপ ডিবাগ করার জন্য একটি ডিভাইস নির্বাচন করুন।
  • আপনার জাভা, কোটলিন এবং সি/সি++ কোডে ব্রেকপয়েন্ট সেট করুন।
  • রানটাইমে ভেরিয়েবল পরীক্ষা করুন এবং এক্সপ্রেশন মূল্যায়ন করুন।

এই পৃষ্ঠায় মৌলিক ডিবাগার কার্যক্রমের নির্দেশাবলী রয়েছে। আরও তথ্যের জন্য, ইন্টেলিজেন্ট আইডিয়া ডিবাগিং ডকুমেন্টেশনও দেখুন।

ডিবাগিং সক্ষম করুন

ডিবাগিং শুরু করার আগে, নিম্নলিখিতগুলি করুন:

আপনার ডিভাইসে ডিবাগিং চালু করুন।
আপনি যদি এমুলেটর ব্যবহার করেন, তাহলে ডিবাগিং ডিফল্টরূপে চালু থাকে। কিন্তু কোনো সংযুক্ত ডিভাইসের জন্য, আপনাকে ডিভাইসটির ডেভেলপার অপশন থেকে ডিবাগিং চালু করতে হবে।
ডিবাগযোগ্য বিল্ড ভ্যারিয়েন্টটি চালান।

এমন একটি বিল্ড ভ্যারিয়েন্ট ব্যবহার করুন যাতে বিল্ড কনফিগারেশনে debuggable true (কোটলিন স্ক্রিপ্টে isDebuggable = true ) অন্তর্ভুক্ত থাকে।

সাধারণত, আপনি প্রতিটি অ্যান্ড্রয়েড স্টুডিও প্রজেক্টে অন্তর্ভুক্ত ডিফল্ট "ডিবাগ" ভ্যারিয়েন্টটি নির্বাচন করতে পারেন, যদিও এটি build.gradle ফাইলে দৃশ্যমান থাকে না। তবে, যদি আপনি নতুন বিল্ড টাইপ সংজ্ঞায়িত করেন যা ডিবাগযোগ্য হওয়া উচিত, তাহলে আপনাকে অবশ্যই বিল্ড টাইপে debuggable true যোগ করতে হবে:

গ্রুভি

android {
    buildTypes {
        customDebugType {
            debuggable true
            ...
        }
    }
}

কোটলিন

android {
    buildTypes {
        create("customDebugType") {
            isDebuggable = true
            ...
        }
    }
}

এই বৈশিষ্ট্যটি C/C++ কোডযুক্ত মডিউলগুলোর ক্ষেত্রেও প্রযোজ্য।

দ্রষ্টব্য: jniDebuggable প্রপার্টিটি এখন আর ব্যবহার করা হয় না।

যদি আপনার অ্যাপ এমন কোনো লাইব্রেরি মডিউলের উপর নির্ভর করে যা আপনি ডিবাগও করতে চান, তবে সেই লাইব্রেরিটিকেও অবশ্যই debuggable true সহ প্যাকেজ করতে হবে, যাতে এটি তার ডিবাগ সিম্বলগুলো ধরে রাখে। আপনার অ্যাপ প্রজেক্টের ডিবাগযোগ্য সংস্করণগুলো যেন কোনো লাইব্রেরি মডিউলের ডিবাগযোগ্য সংস্করণটি পায়, তা নিশ্চিত করতে আপনার লাইব্রেরির নন-ডিফল্ট সংস্করণগুলো পাবলিশ করুন।

ডিবাগিং শুরু করুন

আপনি নিম্নলিখিত উপায়ে একটি ডিবাগিং সেশন শুরু করতে পারেন:

  1. আপনার অ্যাপের কোডে ব্রেকপয়েন্ট সেট করুন।
  2. টুলবারে থাকা টার্গেট ডিভাইস মেনু থেকে আপনার অ্যাপ ডিবাগ করার জন্য একটি ডিভাইস নির্বাচন করুন।
    টার্গেট ডিভাইস মেনু।
    চিত্র ১. লক্ষ্য ডিভাইসের মেনু।

    যদি আপনার কোনো ডিভাইস কনফিগার করা না থাকে, তাহলে অ্যান্ড্রয়েড এমুলেটর ব্যবহার করার জন্য আপনাকে হয় USB-এর মাধ্যমে একটি ডিভাইস সংযোগ করতে হবে, অথবা Wi-Fi-এর মাধ্যমে একটি ডিভাইস সংযোগ করতে হবে , কিংবা একটি AVD তৈরি করতে হবে

  3. টুলবারে, ডিবাগ-এ ক্লিক করুন। .

    যদি আপনার অ্যাপটি ডিভাইসে আগে থেকেই চালু থাকে, তাহলে একটি ডায়ালগ বক্স প্রদর্শিত হবে যেখানে জিজ্ঞাসা করা হবে আপনি 'রান' থেকে 'ডিবাগ'-এ পরিবর্তন করতে চান কিনা। ডিবাগিং শুরু করার জন্য ডিভাইসটি রিস্টার্ট করতে হবে। অ্যাপটির একই ইনস্ট্যান্স চালু রাখতে, 'ক্যানসেল ডিবাগ'-এ ক্লিক করুন এবং এর পরিবর্তে ডিবাগারটিকে একটি চলমান অ্যাপের সাথে সংযুক্ত করুন । অন্যথায়, অ্যান্ড্রয়েড স্টুডিও একটি APK তৈরি করে, সেটিকে একটি ডিবাগ কী দিয়ে সাইন করে, আপনার নির্বাচিত ডিভাইসে ইনস্টল করে এবং রান করে।

    আপনি আপনার প্রজেক্টে C এবং C++ কোড যোগ করলে , অ্যান্ড্রয়েড স্টুডিও আপনার নেটিভ কোড ডিবাগ করার জন্য ডিবাগ উইন্ডোতে LLDB ডিবাগারটিও চালায়।

  4. যদি ডিবাগ উইন্ডো খোলা না থাকে, তাহলে ভিউ > টুল উইন্ডোজ > ডিবাগ নির্বাচন করুন, অথবা ডিবাগ-এ ক্লিক করুন। টুল উইন্ডো বারে।

চলমান অ্যাপে ডিবাগারটি সংযুক্ত করুন।

আপনার অ্যাপটি যদি ইতিমধ্যেই আপনার ডিভাইসে চালু থাকে, তাহলে অ্যাপটি রিস্টার্ট না করেই নিম্নোক্তভাবে ডিবাগিং শুরু করতে পারেন:

  1. অ্যান্ড্রয়েড প্রসেসে ডিবাগার সংযুক্ত করতে ক্লিক করুন .
  2. 'Choose Process' ডায়ালগ বক্সে, যে প্রসেসটির সাথে আপনি ডিবাগার সংযুক্ত করতে চান, সেটি নির্বাচন করুন।
    1. আপনি যদি কোনো এমুলেটর বা রুটেড ডিভাইস ব্যবহার করেন, তাহলে সমস্ত প্রসেস দেখতে ‘Show all processes’ অপশনটি চেক করতে পারেন। রুটেড ডিভাইসে, এটি ডিভাইসে চলমান সমস্ত প্রসেস দেখাবে। তবে, আন-রুটেড ডিভাইসে, এটি শুধুমাত্র ডিবাগযোগ্য প্রসেসগুলো দেখাবে।
    2. 'Use Android Debugger Settings from' মেনু থেকে, আপনি একটি বিদ্যমান রান/ডিবাগ কনফিগারেশন নির্বাচন করতে পারেন। C এবং C++ কোডের জন্য, এটি আপনাকে একটি বিদ্যমান কনফিগারেশনে LLDB স্টার্টআপ কমান্ড, LLDB পোস্ট-অ্যাটাচ কমান্ড এবং সিম্বল ডিরেক্টরিগুলো পুনরায় ব্যবহার করার সুযোগ দেয়।
    3. আপনার যদি আগে থেকে কোনো রান/ডিবাগ কনফিগারেশন না থাকে, তাহলে 'Create New' নির্বাচন করুন। এটি নির্বাচন করলে 'Debug Type' মেনুটি চালু হবে, যেখান থেকে আপনি একটি ভিন্ন ডিবাগ টাইপ বেছে নিতে পারবেন। ডিফল্টরূপে, আপনার প্রজেক্টে জাভা নাকি C/C++ কোড আছে, তার উপর ভিত্তি করে আপনার জন্য সেরা ডিবাগার বিকল্পটি বেছে নিতে অ্যান্ড্রয়েড স্টুডিও 'Detect Automatically' ডিবাগ টাইপটি ব্যবহার করে।
  3. OK ক্লিক করুন।

    ডিবাগ উইন্ডোটি প্রদর্শিত হয়।

ডিভাইস এক্সপ্লোরারের ( ভিউ > টুল উইন্ডোজ > ডিভাইস এক্সপ্লোরার ) প্রসেস ট্যাবেও ডিবাগযোগ্য প্রসেসগুলোর একটি তালিকা থাকে। সেখান থেকে আপনি একটি প্রসেস নির্বাচন করে সেটিকে কিল করতে পারেন। , ফোর্স-স্টপ অথবা কোনো নির্দিষ্ট প্রসেসে ডিবাগার সংযুক্ত করুন। .

ডিবাগ উইন্ডো

চিত্র ২. ডিবাগ উইন্ডো।

ডিবাগ উইন্ডোটি বিভক্ত

  1. এক্সিকিউশন এবং নেভিগেশন টুলবার দেখুন ব্রেকপয়েন্ট নিয়ে কাজ করুন
  2. থ্রেড নির্বাচক
  3. মূল্যায়ন এবং এক্সপ্রেশন এন্ট্রি পর্যবেক্ষণ করুন। ভেরিয়েবল পরিদর্শন দেখুন।
  4. স্ট্যাক ডিসপ্লে
  5. ভেরিয়েবল প্যান। ভেরিয়েবল পরিদর্শন দেখুন।

দ্রষ্টব্য: অ্যান্ড্রয়েড স্টুডিও ডিবাগার এবং গার্বেজ কালেক্টর একে অপরের সাথে শিথিলভাবে সংযুক্ত। অ্যান্ড্রয়েড ভার্চুয়াল মেশিন নিশ্চিত করে যে, ডিবাগার সংযোগ বিচ্ছিন্ন না হওয়া পর্যন্ত এর দ্বারা জ্ঞাত কোনো অবজেক্টের গার্বেজ কালেকশন করা হয় না। এর ফলে ডিবাগার সংযুক্ত থাকা অবস্থায় অবজেক্ট জমা হতে পারে। উদাহরণস্বরূপ, যদি ডিবাগার একটি চলমান থ্রেড দেখতে পায়, তবে থ্রেডটি শেষ হয়ে গেলেও, ডিবাগারের সংযোগ বিচ্ছিন্ন না হওয়া পর্যন্ত সংশ্লিষ্ট Thread অবজেক্টটির গার্বেজ কালেকশন করা হয় না।

ডিবাগারের ধরণ পরিবর্তন করুন

যেহেতু Java/Kotlin কোড এবং C/C++ কোড ডিবাগ করার জন্য ভিন্ন ভিন্ন ডিবাগার টুলের প্রয়োজন হয়, তাই Android Studio ডিবাগার আপনাকে কোন ধরনের ডিবাগার ব্যবহার করবেন তা বেছে নেওয়ার সুযোগ দেয়। ডিফল্টরূপে, Android Studio 'Detect Automatically ' ডিবাগার টাইপ ব্যবহার করে আপনার প্রোজেক্টে শনাক্ত করা ভাষাগুলোর উপর ভিত্তি করে কোন ডিবাগার ব্যবহার করবে তা নির্ধারণ করে।

ডিবাগ কনফিগারেশনে ম্যানুয়ালি ডিবাগার নির্বাচন করতে, রান > কনফিগারেশন সম্পাদনা-তে ক্লিক করুন। এছাড়াও , রান > অ্যান্ড্রয়েড প্রসেসে ডিবাগার সংযুক্ত করুন -এ ক্লিক করলে যে ডায়ালগ বক্সটি আসে, সেখান থেকেও আপনি ডিবাগার নির্বাচন করতে পারেন।

উপলব্ধ ডিবাগ প্রকারগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত:

স্বয়ংক্রিয়ভাবে সনাক্ত করুন
আপনি যে কোডটি ডিবাগ করছেন, তার জন্য অ্যান্ড্রয়েড স্টুডিও যদি স্বয়ংক্রিয়ভাবে সেরা বিকল্পটি বেছে নেয়, তবে এই ডিবাগ টাইপটি নির্বাচন করুন। উদাহরণস্বরূপ, আপনার প্রজেক্টে যদি কোনো C বা C++ কোড থাকে, তাহলে অ্যান্ড্রয়েড স্টুডিও স্বয়ংক্রিয়ভাবে ডুয়াল (Dual) ডিবাগ টাইপ ব্যবহার করে। অন্যথায়, অ্যান্ড্রয়েড স্টুডিও জাভা-অনলি (Java-Only) ডিবাগ টাইপ ব্যবহার করে।
শুধুমাত্র জাভা
আপনি যদি শুধুমাত্র জাভা বা কোটলিনে লেখা কোড ডিবাগ করতে চান, তাহলে এই ডিবাগ টাইপটি নির্বাচন করুন। জাভা-অনলি ডিবাগারটি আপনার নেটিভ কোডে সেট করা যেকোনো ব্রেকপয়েন্ট বা ওয়াচ উপেক্ষা করে।
শুধুমাত্র নেটিভদের জন্য (শুধুমাত্র C/C++ কোডের সাথে উপলব্ধ)
আপনি যদি শুধুমাত্র LLDB ব্যবহার করে আপনার কোড ডিবাগ করতে চান, তাহলে এই ডিবাগ টাইপটি নির্বাচন করুন। এই ডিবাগ টাইপটি ব্যবহার করার সময়, জাভা ডিবাগার সেশন ভিউ উপলব্ধ থাকে না। ডিফল্টরূপে, LLDB শুধুমাত্র আপনার নেটিভ কোড পরীক্ষা করে এবং আপনার জাভা কোডের ব্রেকপয়েন্ট উপেক্ষা করে। আপনি যদি আপনার জাভা কোডও ডিবাগ করতে চান, তাহলে 'ডিটেক্ট অটোমেটিক্যালি' অথবা 'ডুয়াল' ডিবাগ টাইপে পরিবর্তন করুন।

নেটিভ ডিবাগিং শুধুমাত্র সেইসব ডিভাইসে কাজ করে যেগুলো নিম্নলিখিত শর্তগুলো পূরণ করে:

  • ডিভাইসটি 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 ব্যতীত অন্য কোনো মান প্রিন্ট করবে।

ডুয়াল (জাভা + নেটিভ) - শুধুমাত্র C/C++ কোডের সাথে উপলব্ধ
আপনি যদি জাভা এবং নেটিভ কোড উভয়ই ডিবাগ করার মধ্যে পরিবর্তন করতে চান, তাহলে এই ডিবাগ টাইপটি নির্বাচন করুন। অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপ প্রসেসের সাথে জাভা ডিবাগার এবং LLDB উভয়কেই সংযুক্ত করে, ফলে আপনি আপনার অ্যাপ পুনরায় চালু না করে বা ডিবাগ কনফিগারেশন পরিবর্তন না করেই আপনার জাভা এবং নেটিভ কোড উভয়ের ব্রেকপয়েন্ট পরীক্ষা করতে পারেন।

চিত্র ২-এ, ডিবাগ উইন্ডোর শিরোনামের ডানদিকে থাকা দুটি ট্যাব লক্ষ্য করুন। যেহেতু অ্যাপটিতে জাভা এবং সি++ উভয় কোডই রয়েছে, তাই একটি ট্যাব নেটিভ কোড ডিবাগ করার জন্য এবং অন্যটি জাভা কোড ডিবাগ করার জন্য, যা -java দ্বারা নির্দেশিত।

চিত্র ৩. নেটিভ কোড ডিবাগ করার ট্যাব এবং জাভা কোড ডিবাগ করার ট্যাব।

দ্রষ্টব্য: কম্পাইলার দ্বারা অপ্টিমাইজ করা নেটিভ কোড ডিবাগ করার সময়, আপনি নিম্নলিখিত সতর্কীকরণ বার্তাটি পেতে পারেন:
This function was compiled with optimizations enabled. Some debugger features may not be available । অপটিমাইজেশন ফ্ল্যাগ ব্যবহার করার সময়, কম্পাইলার আপনার কম্পাইল করা কোডে পরিবর্তন আনে যাতে এটি আরও দক্ষতার সাথে চলে। এর ফলে ডিবাগার অপ্রত্যাশিত বা ভুল তথ্য দেখাতে পারে, কারণ অপটিমাইজ করা কম্পাইল করা কোডকে মূল সোর্স কোডের সাথে পুনরায় মেলানো ডিবাগারের জন্য কঠিন হয়ে পড়ে। এই কারণে, আপনার নেটিভ কোড ডিবাগ করার সময় কম্পাইলার অপটিমাইজেশন নিষ্ক্রিয় রাখা উচিত।

সিস্টেম লগ ব্যবহার করুন

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

আপনার কোডে লগ বার্তা লিখুন

আপনার কোডে লগ মেসেজ লেখার জন্য Log ক্লাসটি ব্যবহার করুন। আপনি যখন আপনার অ্যাপ ব্যবহার করেন, তখন সিস্টেমের ডিবাগ আউটপুট সংগ্রহ করার মাধ্যমে লগ মেসেজগুলো আপনাকে এক্সিকিউশন ফ্লো বুঝতে সাহায্য করে। লগ মেসেজগুলো আপনার অ্যাপের কোন অংশটি ব্যর্থ হয়েছে, তাও জানাতে পারে। লগিং সম্পর্কে আরও তথ্যের জন্য, “Logcat দিয়ে লগ লেখা ও দেখা” দেখুন।

নিম্নলিখিত উদাহরণটি দেখায় যে আপনার অ্যাক্টিভিটি শুরু হওয়ার সময় পূর্ববর্তী অবস্থার তথ্য উপলব্ধ আছে কিনা তা নির্ধারণ করতে আপনি কীভাবে লগ বার্তা যোগ করতে পারেন:

কোটলিন

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 */
        }
        ...
    }
}

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

কোটলিন

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 এবং এর ফিল্টারিং অপশনগুলো সম্পর্কে জানতে, “Write and view logs with Logcat” দেখুন।

ব্রেকপয়েন্ট নিয়ে কাজ করুন

অ্যান্ড্রয়েড স্টুডিও ব্রেকপয়েন্ট সমর্থন করে, যা বিভিন্ন ডিবাগিং কার্যক্রম চালু করে। ব্রেকপয়েন্টের বেশ কয়েকটি প্রকার রয়েছে:

লাইন ব্রেকপয়েন্ট
সবচেয়ে সাধারণ ধরনটি হলো লাইন ব্রেকপয়েন্ট, যা আপনার অ্যাপের এক্সিকিউশনকে কোডের একটি নির্দিষ্ট লাইনে থামিয়ে দেয়। থামার সময়, আপনি ভেরিয়েবল পরীক্ষা করতে, এক্সপ্রেশন মূল্যায়ন করতে এবং তারপর রানটাইম ত্রুটির কারণ নির্ধারণ করতে লাইন বাই লাইন এক্সিকিউশন চালিয়ে যেতে পারেন।
মেথড ব্রেকপয়েন্ট
একটি মেথড ব্রেকপয়েন্ট আপনার অ্যাপের এক্সিকিউশনকে একটি নির্দিষ্ট মেথডে প্রবেশ বা প্রস্থান করার সময় থামিয়ে দেয়। থামানো অবস্থায়, আপনি ভেরিয়েবল পরীক্ষা করতে, এক্সপ্রেশন মূল্যায়ন করতে এবং তারপর রানটাইম ত্রুটির কারণ নির্ধারণ করতে লাইন বাই লাইন এক্সিকিউশন চালিয়ে যেতে পারেন। যখন আপনি একটি কম্পোজেবল ফাংশনে ব্রেকপয়েন্ট সেট করেন, তখন ডিবাগার কম্পোজেবলের প্যারামিটার এবং তাদের অবস্থা তালিকাভুক্ত করে, যা রিকম্পোজিশনের কারণ হতে পারে এমন পরিবর্তনগুলি শনাক্ত করতে সহায়তা করে।
ফিল্ড ব্রেকপয়েন্ট
একটি ফিল্ড ব্রেকপয়েন্ট আপনার অ্যাপের কার্যক্রমকে থামিয়ে দেয় যখন এটি কোনো নির্দিষ্ট ফিল্ড থেকে ডেটা পড়ে বা তাতে লেখে।
ব্যতিক্রম ব্রেকপয়েন্ট
যখন কোনো এক্সেপশন ঘটে, তখন একটি এক্সেপশন ব্রেকপয়েন্ট আপনার অ্যাপের কার্যক্রম থামিয়ে দেয়।

আপনি শর্তসাপেক্ষ ব্রেকপয়েন্ট সেট করতে পারেন, যা শুধুমাত্র নির্দিষ্ট শর্ত পূরণ হলেই কোডের এক্সিকিউশন স্থগিত করবে। এছাড়াও আপনি লগিং ব্রেকপয়েন্ট সেট করতে পারেন, যা এক্সিকিউশন স্থগিত না করেই লগক্যাটে ডেটা লেখে। এটি আপনার কোডকে লগ স্টেটমেন্ট দিয়ে ভারাক্রান্ত করা এড়াতে সাহায্য করতে পারে।

লাইন ব্রেকপয়েন্ট যোগ করতে, নিম্নলিখিত পদ্ধতি অনুসরণ করুন:

  1. কোডের যে লাইনে আপনি এক্সিকিউশন থামাতে চান, সেটি খুঁজুন।
  2. কোডের ওই লাইন বরাবর বাম পাশের গাটারে ক্লিক করুন অথবা লাইনের উপর কার্সর রেখে Control+F8 চাপুন (macOS-এ Command+F8 )।
  3. আপনার অ্যাপটি যদি আগে থেকেই চালু থাকে, তাহলে ‘Attach debugger to Android process’-এ ক্লিক করুন। অন্যথায়, ডিবাগিং শুরু করতে, ডিবাগ-এ ক্লিক করুন। .

ব্রেকপয়েন্ট সেট করলে লাইনের পাশে একটি লাল বিন্দু দেখা যায়, যেমনটি চিত্র ৫-এ দেখানো হয়েছে।

চিত্র ৫। ব্রেকপয়েন্ট সেট করলে লাইনের পাশে একটি লাল বিন্দু দেখা যায়।

যখন আপনার কোড এক্সিকিউশন ব্রেকপয়েন্টে পৌঁছায়, তখন অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপের এক্সিকিউশন থামিয়ে দেয়।

অ্যাপটির অবস্থা শনাক্ত করতে, ডিবাগার ট্যাবে থাকা টুলগুলো ব্যবহার করুন:

  • কোনো ভেরিয়েবলের অবজেক্ট ট্রি পরীক্ষা করার জন্য, ভেরিয়েবলস ভিউতে সেটিকে এক্সপ্যান্ড করুন। যদি ভেরিয়েবলস ভিউ দৃশ্যমান না থাকে, তাহলে লেআউট সেটিংস-এ ক্লিক করুন। এবং ভেরিয়েবলগুলো যাচাই করা হয়েছে কিনা তা নিশ্চিত করুন।

  • কোনো মেথডে প্রবেশ না করে কোডের পরবর্তী লাইনে যেতে, স্টেপ ওভার-এ ক্লিক করুন। .

  • মেথড কলের ভিতরে প্রথম লাইনে যেতে, স্টেপ ইনটু-তে ক্লিক করুন। .

  • বর্তমান মেথডের বাইরে পরবর্তী লাইনে যেতে, স্টেপ আউট-এ ক্লিক করুন। .

  • অ্যাপটি স্বাভাবিকভাবে চালানো চালিয়ে যেতে, 'Resume Program'-এ ক্লিক করুন। .

আপনার প্রজেক্টে যদি কোনো নেটিভ কোড ব্যবহার করা হয়, তাহলে ডিফল্টভাবে ‘Detect Automatically’ ডিবাগ টাইপটি জাভা ডিবাগার এবং LLDB উভয়কেই আপনার অ্যাপে দুটি পৃথক প্রসেস হিসেবে সংযুক্ত করে। আপনি আপনার অ্যাপ রিস্টার্ট না করে বা কোনো সেটিংস পরিবর্তন না করেই জাভা এবং C/C++ ব্রেকপয়েন্ট পরিদর্শনের মধ্যে সুইচ করতে পারেন।

দ্রষ্টব্য: আপনার C বা C++ কোডে অ্যান্ড্রয়েড স্টুডিও যাতে ব্রেকপয়েন্ট শনাক্ত করতে পারে, তার জন্য আপনাকে LLDB সমর্থন করে এমন একটি ডিবাগ টাইপ ব্যবহার করতে হবে, যেমন ডিটেক্ট অটোমেটিক্যালি, নেটিভ বা ডুয়াল। আপনি আপনার ডিবাগ কনফিগারেশন সম্পাদনা করে অ্যান্ড্রয়েড স্টুডিওর ব্যবহৃত ডিবাগ টাইপ পরিবর্তন করতে পারেন। বিভিন্ন ডিবাগ টাইপ সম্পর্কে আরও জানতে, "অন্যান্য ডিবাগ টাইপ ব্যবহার" সম্পর্কিত বিভাগটি পড়ুন।

যখন অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপটি টার্গেট ডিভাইসে ডেপ্লয় করে, তখন ডিবাগ উইন্ডোটি খোলে এবং প্রতিটি ডিবাগার প্রসেসের জন্য একটি ট্যাব বা ডিবাগ সেশন ভিউ দেখা যায়, যেমনটি চিত্র ৬-এ দেখানো হয়েছে।

চিত্র ৬. এলএলডিবি ব্যবহার করে নেটিভ কোড ডিবাগিং।
  1. যখন LLDB ডিবাগার আপনার C/C++ কোডে কোনো ব্রেকপয়েন্ট খুঁজে পায়, তখন অ্যান্ড্রয়েড স্টুডিও <your-module> ট্যাবে চলে যায়। ফ্রেমস, ভ্যারিয়েবলস এবং ওয়াচেস প্যানগুলোও উপলব্ধ থাকে এবং জাভা কোড ডিবাগ করার মতোই হুবহু কাজ করে।

    যদিও থ্রেডস পেইনটি LLDB সেশন ভিউতে উপলব্ধ নয়, আপনি ফ্রেমস পেইনের তালিকা ব্যবহার করে আপনার অ্যাপ প্রসেসগুলো অ্যাক্সেস করতে পারেন। উইন্ডো ফ্রেম ডিবাগ করা এবং ভেরিয়েবল পরিদর্শন করার পদ্ধতি সম্পর্কিত বিভাগগুলোতে এই পেইনগুলো সম্পর্কে আরও জানুন।

    দ্রষ্টব্য: আপনার নেটিভ কোডে কোনো ব্রেকপয়েন্ট পরিদর্শন করার সময়, অ্যান্ড্রয়েড সিস্টেম সেই ভার্চুয়াল মেশিনটিকে স্থগিত করে দেয় যেটি আপনার অ্যাপের জাভা বাইটকোড চালায়। এর মানে হলো, আপনার নেটিভ কোডে কোনো ব্রেকপয়েন্ট পরিদর্শন করার সময় আপনি জাভা ডিবাগারের সাথে যোগাযোগ করতে বা আপনার জাভা ডিবাগার সেশন থেকে কোনো স্টেট তথ্য পুনরুদ্ধার করতে পারবেন না।

  2. যখন জাভা ডিবাগার আপনার জাভা বা কোটলিন কোডে কোনো ব্রেকপয়েন্ট খুঁজে পায়, তখন অ্যান্ড্রয়েড স্টুডিও <your-module> -java ট্যাবে চলে যায়।
  3. LLDB দিয়ে ডিবাগ করার সময়, আপনি LLDB সেশন ভিউ-এর মধ্যে থাকা LLDB টার্মিনাল ব্যবহার করে LLDB-তে কমান্ড-লাইন অপশন পাঠাতে পারেন। যদি এমন কিছু নির্দিষ্ট কমান্ড থাকে যা আপনি চান যে আপনার অ্যাপ ডিবাগ করা শুরু করার প্রতিবারই, ডিবাগারটি আপনার অ্যাপ প্রসেসের সাথে সংযুক্ত হওয়ার ঠিক আগে বা ঠিক পরে, LLDB এক্সিকিউট করুক, তাহলে আপনি সেই কমান্ডগুলো আপনার ডিবাগ কনফিগারেশনে যোগ করতে পারেন।

C/C++ কোড ডিবাগ করার সময়, আপনি ওয়াচপয়েন্ট নামক এক বিশেষ ধরনের ব্রেকপয়েন্টও সেট করতে পারেন, যা আপনার অ্যাপ যখন মেমোরির কোনো নির্দিষ্ট ব্লকের সাথে ইন্টারঅ্যাক্ট করে, তখন অ্যাপ প্রসেসটিকে স্থগিত করে দিতে পারে। আরও জানতে, কীভাবে ওয়াচপয়েন্ট যোগ করতে হয় সেই অংশটি পড়ুন।

ব্রেকপয়েন্টগুলি দেখুন এবং কনফিগার করুন

সমস্ত ব্রেকপয়েন্ট দেখতে এবং ব্রেকপয়েন্ট সেটিংস কনফিগার করতে, 'ভিউ ব্রেকপয়েন্টস'-এ ক্লিক করুন। ডিবাগ উইন্ডোতে। ব্রেকপয়েন্ট উইন্ডোটি প্রদর্শিত হয়, যেমনটি চিত্র ৭-এ দেখানো হয়েছে।

চিত্র ৭। ব্রেকপয়েন্ট উইন্ডোটি সমস্ত বর্তমান ব্রেকপয়েন্ট তালিকাভুক্ত করে এবং প্রতিটির জন্য আচরণগত সেটিংস অন্তর্ভুক্ত করে।

ব্রেকপয়েন্ট উইন্ডো আপনাকে প্যানেলের তালিকা থেকে প্রতিটি ব্রেকপয়েন্ট সক্রিয় বা নিষ্ক্রিয় করার সুযোগ দেয়। যদি কোনো ব্রেকপয়েন্ট নিষ্ক্রিয় করা থাকে, তাহলে অ্যান্ড্রয়েড স্টুডিও সেই ব্রেকপয়েন্টে পৌঁছালে আপনার অ্যাপটিকে থামায় না।

এর সেটিংস কনফিগার করতে তালিকা থেকে একটি ব্রেকপয়েন্ট নির্বাচন করুন। আপনি একটি ব্রেকপয়েন্টকে প্রথমে নিষ্ক্রিয় রাখতে এবং অন্য একটি ব্রেকপয়েন্ট হিট হওয়ার পর সিস্টেমকে সেটি সক্রিয় করতে কনফিগার করতে পারেন। একটি ব্রেকপয়েন্ট হিট হওয়ার পর সেটি নিষ্ক্রিয় হবে কি না, তাও আপনি কনফিগার করতে পারেন। যেকোনো এক্সেপশনের জন্য ব্রেকপয়েন্ট সেট করতে, ব্রেকপয়েন্টের তালিকা থেকে ‘এক্সেপশন ব্রেকপয়েন্টস’ নির্বাচন করুন।

সাময়িকভাবে সমস্ত ব্রেকপয়েন্ট নিষ্ক্রিয় করতে, মিউট ব্রেকপয়েন্টস-এ ক্লিক করুন। ডিবাগ উইন্ডোতে। পুনরায় চালু করতে আবার ক্লিক করুন।

ডিবাগ উইন্ডো ফ্রেম

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

একটি থ্রেড নির্বাচন করতে, থ্রেড সিলেক্টর মেনু ব্যবহার করুন এবং এর স্ট্যাক ফ্রেমটি দেখুন। এডিটরে সোর্সটি খোলার জন্য ফ্রেমের উপাদানগুলিতে ক্লিক করুন। এছাড়াও , 'ফ্রেম পরীক্ষা করুন' গাইডে আলোচিত পদ্ধতি অনুযায়ী আপনি থ্রেডের উপস্থাপনা কাস্টমাইজ করতে এবং স্ট্যাক ফ্রেমটি এক্সপোর্ট করতে পারেন।

ভেরিয়েবলগুলি পরিদর্শন করুন

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

অবজেক্ট ট্রি-তে একটি এক্সপ্রেশন যোগ করতে (অ্যাপ্লিকেশনটি ডিবাগ করার সময়):

চিত্র ৮. ডিবাগ উইন্ডোর অবজেক্ট ট্রি এবং এক্সপ্রেশন এন্ট্রি বক্স।
  1. দেখার বা প্রদর্শন করার জন্য এক্সপ্রেশনটি প্রবেশ করান।
  2. এক্সপ্রেশনটি একবার মূল্যায়ন করতে 'Add to watches'-এ ক্লিক করুন অথবা এন্টার চাপুন।

বিকল্পভাবে, যদি অবজেক্ট ট্রি-তে আপনি যে এক্সপ্রেশনটি পর্যবেক্ষণ করতে চান তা থাকে, তবে আপনি সেটিকে ট্রি-র শীর্ষে টেনে এনে একটি পর্যবেক্ষণাধীন এক্সপ্রেশন হিসেবে যুক্ত করতে পারেন।

যখন ব্রেকপয়েন্ট হিট হবে অথবা আপনি আপনার কোড ধাপে ধাপে দেখবেন, তখন পর্যবেক্ষণাধীন এক্সপ্রেশনগুলো আপডেট হবে।

যতক্ষণ না আপনি নিজে থেকে অন্য কোনো এক্সপ্রেশন মূল্যায়ন করছেন বা আপনার কোড ধাপে ধাপে চালাচ্ছেন, ততক্ষণ পর্যন্ত মূল্যায়ন করা এক্সপ্রেশনগুলো অবজেক্ট ট্রি-র শীর্ষে প্রদর্শিত হতে থাকবে।

অবজেক্ট ট্রি থেকে কোনো ওয়াচড এক্সপ্রেশন সরাতে, এক্সপ্রেশনটির উপর রাইট-ক্লিক করুন এবং তারপরে রিমুভ ওয়াচ-এ ক্লিক করুন।

ওয়াচপয়েন্ট যোগ করুন

C/C++ কোড ডিবাগ করার সময়, আপনি ওয়াচপয়েন্ট নামক বিশেষ ধরনের ব্রেকপয়েন্ট সেট করতে পারেন, যা আপনার অ্যাপ যখন কোনো নির্দিষ্ট মেমোরি ব্লকের সাথে ইন্টারঅ্যাক্ট করে তখন অ্যাপ প্রসেসটিকে স্থগিত করে দিতে পারে। উদাহরণস্বরূপ, যদি আপনি একটি মেমোরি ব্লকের জন্য দুটি পয়েন্টার সেট করেন এবং সেটিতে একটি ওয়াচপয়েন্ট নির্ধারণ করেন, তবে যেকোনো একটি পয়েন্টার ব্যবহার করে সেই মেমোরি ব্লকটি অ্যাক্সেস করলেই ওয়াচপয়েন্টটি ট্রিগার হবে।

অ্যান্ড্রয়েড স্টুডিওতে, আপনি রানটাইমের সময় একটি নির্দিষ্ট ভেরিয়েবল নির্বাচন করে একটি ওয়াচপয়েন্ট তৈরি করতে পারেন, কিন্তু LLDB ওয়াচপয়েন্টটিকে শুধুমাত্র সেই মেমরি ব্লকে অ্যাসাইন করে যা সিস্টেম ঐ ভেরিয়েবলের জন্য বরাদ্দ করে, ভেরিয়েবলটির নিজের উপর নয়। এটি ওয়াচেস প্যানে একটি ভেরিয়েবল যুক্ত করার থেকে ভিন্ন, যা আপনাকে একটি ভেরিয়েবলের মান পর্যবেক্ষণ করতে সক্ষম করে কিন্তু যখন সিস্টেম মেমরিতে এর মান পড়ে বা পরিবর্তন করে তখন আপনার অ্যাপ প্রসেসকে সাসপেন্ড করতে দেয় না।

দ্রষ্টব্য: যখন আপনার অ্যাপ প্রসেস কোনো ফাংশন থেকে বেরিয়ে যায় এবং সিস্টেম মেমরি থেকে এর লোকাল ভেরিয়েবলগুলো ডিলোকেট করে, তখন আপনাকে সেই ভেরিয়েবলগুলোর জন্য তৈরি করা যেকোনো ওয়াচপয়েন্ট পুনরায় অ্যাসাইন করতে হবে।

একটি ওয়াচপয়েন্ট সেট করতে হলে, আপনাকে নিম্নলিখিত শর্তগুলো পূরণ করতে হবে:

  • আপনার টার্গেট ফিজিক্যাল ডিভাইস বা এমুলেটর একটি x86 বা x86_64 সিপিইউ ব্যবহার করে। যদি আপনার ডিভাইসটি একটি ARM সিপিইউ ব্যবহার করে, তাহলে আপনাকে অবশ্যই মেমরিতে আপনার ভেরিয়েবলের অ্যাড্রেসের সীমানা ৩২-বিট প্রসেসরের জন্য ৪ বাইট, অথবা ৬৪-বিট প্রসেসরের জন্য ৮ বাইটে অ্যালাইন করতে হবে। আপনার নেটিভ কোডে একটি ভেরিয়েবল অ্যালাইন করতে, ভেরিয়েবল ডিক্লারেশনে __attribute__((aligned( num_bytes ))) উল্লেখ করুন, যেমনটি নিচে দেখানো হয়েছে:
    // For a 64-bit ARM processor
    int my_counter __attribute__((aligned(8)));
  • আপনি ইতিমধ্যেই তিনটি বা তার কম ওয়াচপয়েন্ট নির্ধারণ করেছেন। অ্যান্ড্রয়েড স্টুডিও x86 বা x86_64 টার্গেট ডিভাইসে সর্বোচ্চ চারটি ওয়াচপয়েন্ট সমর্থন করে। অন্যান্য ডিভাইস এর চেয়ে কম ওয়াচপয়েন্ট সমর্থন করতে পারে।

দ্রষ্টব্য: ৩২-বিট ARM ABI ব্যবহার করে আপনার অ্যাপ ডিবাগ করার সময়, ওয়াচপয়েন্ট যোগ করলে বা কোডের মধ্যে থাকা ভেরিয়েবলের মান পরীক্ষা করার জন্য সেগুলোর উপর মাউস রাখলে অ্যাপ ক্র্যাশ করতে পারে। এর বিকল্প হিসেবে, ৬৪-বিট ARM, x86, বা x86_64 বাইনারি ব্যবহার করে ডিবাগ করুন। অ্যান্ড্রয়েড স্টুডিওর আসন্ন কোনো রিলিজে এই সমস্যাটি সমাধান করা হবে।

যদি আপনি শর্তগুলো পূরণ করেন, তাহলে নিম্নোক্তভাবে একটি ওয়াচপয়েন্ট যোগ করতে পারেন:

  1. যখন আপনার অ্যাপটি একটি ব্রেকপয়েন্টে স্থগিত থাকবে, তখন আপনার LLDB সেশন ভিউ-এর ভেরিয়েবল প্যানে যান।
  2. আপনি যে মেমরি ব্লকটি ট্র্যাক করতে চান, সেই ব্লকটি দখলকারী ভেরিয়েবলটির উপর রাইট-ক্লিক করুন এবং 'অ্যাড ওয়াচপয়েন্ট' (Add Watchpoint) নির্বাচন করুন।

    চিত্র ৯। মেমরিতে থাকা কোনো ভেরিয়েবলে ওয়াচপয়েন্ট যোগ করুন।
  3. আপনার ওয়াচপয়েন্ট কনফিগার করার জন্য একটি ডায়ালগ বক্স প্রদর্শিত হবে, যেমনটি চিত্র ৯-এ দেখানো হয়েছে।

    নিম্নলিখিত বিকল্পগুলি ব্যবহার করে আপনার ওয়াচপয়েন্ট কনফিগার করুন:

    • সক্রিয়: আপনি যদি সেটিংটি পরিবর্তন না করা পর্যন্ত অ্যান্ড্রয়েড স্টুডিওকে ওয়াচপয়েন্টটি উপেক্ষা করতে বলতে চান, তাহলে এই বিকল্পটি অনির্বাচিত করুন। অ্যান্ড্রয়েড স্টুডিও আপনার ওয়াচপয়েন্ট সংরক্ষণ করে রাখে, যাতে আপনি পরবর্তীতে এটি ব্যবহার করতে পারেন।
    • স্থগিত করুন: ডিফল্টরূপে, অ্যান্ড্রয়েড সিস্টেম আপনার অ্যাপ প্রসেসকে স্থগিত করে যখন এটি আপনার ওয়াচপয়েন্টের জন্য নির্ধারিত কোনো মেমরি ব্লক অ্যাক্সেস করে। আপনি যদি এই আচরণটি না চান তবে এই বিকল্পটি অনির্বাচিত করুন। এটি অতিরিক্ত বিকল্পগুলি প্রকাশ করে যা আপনি সিস্টেম যখন আপনার ওয়াচপয়েন্টের সাথে ইন্টারঅ্যাক্ট করে তখন আচরণ কাস্টমাইজ করতে ব্যবহার করতে পারেন: কনসোলে বার্তা লগ করুন এবং হিট হলে সরিয়ে ফেলুন
    • অ্যাক্সেস টাইপ: সিস্টেম কর্তৃক ভেরিয়েবলের জন্য বরাদ্দকৃত মেমরি ব্লকে আপনার অ্যাপ যখন রিড (Read) বা রাইট (Write) করার চেষ্টা করবে, তখন সেটি আপনার ওয়াচপয়েন্ট ট্রিগার করবে কিনা তা নির্বাচন করুন। রিড বা রাইট উভয় ক্ষেত্রেই আপনার ওয়াচপয়েন্ট ট্রিগার করতে, ‘Any’ নির্বাচন করুন।
  4. সম্পন্ন ক্লিক করুন।

আপনার সমস্ত ওয়াচপয়েন্ট দেখতে এবং ওয়াচপয়েন্ট সেটিংস কনফিগার করতে, 'ভিউ ব্রেকপয়েন্টস'-এ ক্লিক করুন। ডিবাগ উইন্ডোতে, ব্রেকপয়েন্ট ডায়ালগ বক্সটি প্রদর্শিত হবে, যেমনটি চিত্র ১০-এ দেখানো হয়েছে।

চিত্র ১০। ব্রেকপয়েন্ট ডায়ালগ আপনার বর্তমান ওয়াচপয়েন্টগুলো তালিকাভুক্ত করে এবং প্রতিটির জন্য আচরণগত সেটিংস অন্তর্ভুক্ত করে।

আপনার ওয়াচপয়েন্ট যোগ করার পর, 'Resume Program'-এ ক্লিক করুন। আপনার অ্যাপ প্রসেসটি পুনরায় চালু করতে ডিবাগ উইন্ডোতে যান। ডিফল্টরূপে, যদি আপনার অ্যাপ এমন কোনো মেমরি ব্লক অ্যাক্সেস করার চেষ্টা করে যেখানে আপনি একটি ওয়াচপয়েন্ট সেট করেছেন, তাহলে অ্যান্ড্রয়েড সিস্টেম আপনার অ্যাপ প্রসেসটি স্থগিত করে দেয় এবং একটি ওয়াচপয়েন্ট আইকন প্রদর্শিত হয়। আপনার অ্যাপের সর্বশেষ এক্সিকিউট করা কোড লাইনের পাশে এটি প্রদর্শিত হয়, যেমনটি চিত্র ১১-তে দেখানো হয়েছে।

চিত্র ১১। অ্যান্ড্রয়েড স্টুডিও সেই কোড লাইনটি নির্দেশ করে যা আপনার অ্যাপ একটি ওয়াচপয়েন্ট ট্রিগার করার ঠিক আগে সম্পাদন করে।

রিসোর্স মানের প্রদর্শন বিন্যাস দেখুন এবং পরিবর্তন করুন

ডিবাগ মোডে, আপনি আপনার জাভা বা কোটলিন কোডের ভেরিয়েবলগুলোর জন্য রিসোর্স ভ্যালু দেখতে এবং একটি ভিন্ন ডিসপ্লে ফরম্যাট নির্বাচন করতে পারেন। ভেরিয়েবলস ট্যাবটি প্রদর্শিত থাকা অবস্থায় এবং একটি ফ্রেম নির্বাচিত থাকলে, নিম্নলিখিত কাজগুলো করুন:

  1. ভেরিয়েবল তালিকায়, তালিকাটি প্রদর্শন করতে একটি রিসোর্স লাইনের যেকোনো স্থানে রাইট-ক্লিক করুন।
  2. তালিকা থেকে ‘View as’ নির্বাচন করুন এবং আপনার পছন্দের ফরম্যাটটি বেছে নিন।

    উপলব্ধ ফরম্যাটগুলো আপনার নির্বাচিত রিসোর্সের ডেটা টাইপের উপর নির্ভর করে। আপনি নিম্নলিখিত বিকল্পগুলির মধ্যে এক বা একাধিক দেখতে পারেন:

    • ক্লাস: ক্লাসের সংজ্ঞা প্রদর্শন করুন।
    • toString: স্ট্রিং ফরম্যাট প্রদর্শন করুন।
    • অবজেক্ট: অবজেক্টটির (একটি ক্লাসের ইনস্ট্যান্স) সংজ্ঞা প্রদর্শন করুন।
    • অ্যারে: অ্যারে আকারে প্রদর্শন করুন।
    • টাইমস্ট্যাম্প: তারিখ ও সময় নিম্নলিখিত বিন্যাসে প্রদর্শন করুন: yyyy-mm-dd hh:mm:ss।
    • স্বয়ংক্রিয়: অ্যান্ড্রয়েড স্টুডিও ডেটার ধরনের ওপর ভিত্তি করে সেরা ফরম্যাটটি বেছে নেয়।
    • বাইনারি: শূন্য এবং এক ব্যবহার করে একটি বাইনারি মান প্রদর্শন করুন।
    • MeasureSpec: প্যারেন্ট থেকে নির্বাচিত চাইল্ডে প্রেরিত মান। MeasureSpec দেখুন।
    • হেক্স: হেক্সাডেসিমাল মান হিসেবে প্রদর্শন করা।
    • প্রিমিটিভ: একটি প্রিমিটিভ ডেটা টাইপ ব্যবহার করে সাংখ্যিক মান হিসাবে প্রদর্শন করা।
    • পূর্ণসংখ্যা: Integer টাইপের একটি সাংখ্যিক মান হিসাবে প্রদর্শন করুন।

নিজস্ব ফরম্যাট তৈরি করতে, নিম্নলিখিতগুলি করুন:

  1. রিসোর্স ভ্যালুটির উপর রাইট-ক্লিক করুন।
  2. ভিউ হিসেবে নির্বাচন করুন।
  3. তৈরি করুন নির্বাচন করুন।
  4. Java Data Type Renderers ডায়ালগ বক্সটি প্রদর্শিত হবে। Java Data type renderers- এ দেওয়া নির্দেশাবলী অনুসরণ করুন।