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

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

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

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

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

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

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

বিল্ড কনফিগারেশনে এমন একটি বিল্ড ভেরিয়েন্ট ব্যবহার করুন যাতে 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 এর মাধ্যমে একটি ডিভাইস সংযুক্ত করতে হবে , অথবা Android এমুলেটর ব্যবহার করার জন্য একটি AVD তৈরি করতে হবে

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

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

    যদি আপনি আপনার প্রোজেক্টে C এবং C++ কোড যোগ করেন , তাহলে Android Studio আপনার নেটিভ কোড ডিবাগ করার জন্য Debug উইন্ডোতে LLDB ডিবাগারও চালাবে।

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

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

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

  1. "Attach debugger to Android process" এ ক্লিক করুন। .
  2. "প্রক্রিয়া নির্বাচন করুন" ডায়ালগে, আপনি যে প্রক্রিয়াটিতে ডিবাগারটি সংযুক্ত করতে চান তা নির্বাচন করুন।
    1. যদি আপনি একটি এমুলেটর বা রুটেড ডিভাইস ব্যবহার করেন, তাহলে সমস্ত প্রসেস দেখতে Show all processes চেক করতে পারেন। রুটেড ডিভাইসে, এটি ডিভাইসে চলমান সমস্ত প্রসেস দেখাবে। তবে, রুটেড ডিভাইসে, এটি কেবল ডিবাগযোগ্য প্রসেস দেখাবে।
    2. "Use Android Debugger Settings from" মেনু থেকে, আপনি একটি বিদ্যমান রান/ডিবাগ কনফিগারেশন নির্বাচন করতে পারেন। C এবং C++ কোডের জন্য, এটি আপনাকে LLDB স্টার্টআপ কমান্ড, LLDB পোস্ট-অ্যাটাচ কমান্ড এবং প্রতীক ডিরেক্টরিগুলি একটি বিদ্যমান কনফিগারেশনে পুনরায় ব্যবহার করতে দেয়।
    3. যদি আপনার কাছে আগে থেকে কোনও রান/ডিবাগ কনফিগারেশন না থাকে, তাহলে Create New নির্বাচন করুন। এই নির্বাচনটি Debug Type মেনু সক্ষম করে, যেখানে আপনি একটি ভিন্ন ডিবাগ টাইপ নির্বাচন করতে পারেন। ডিফল্টরূপে, Android Studio Detect Automatically debug টাইপ ব্যবহার করে আপনার প্রোজেক্টে Java কোড আছে নাকি C/C++ কোড আছে তার উপর ভিত্তি করে আপনার জন্য সেরা ডিবাগার বিকল্পটি নির্বাচন করে।
  3. ঠিক আছে ক্লিক করুন।

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

ডিভাইস এক্সপ্লোরার ( View > Tool Windows > Device Explorer ) এর Processes ট্যাবে ডিবাগযোগ্য প্রক্রিয়াগুলির একটি তালিকাও রয়েছে। সেখান থেকে আপনি একটি প্রক্রিয়া নির্বাচন করতে পারেন এবং একটি kill সম্পাদন করতে পারেন। , জোর করে থামানো , অথবা একটি নির্দিষ্ট প্রক্রিয়ার সাথে ডিবাগার সংযুক্ত করুন .

ডিবাগ উইন্ডো

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

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

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

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

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

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

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

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

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

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

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

ডুয়াল (জাভা + নেটিভ) - শুধুমাত্র সি/সি++ কোডের সাথে উপলব্ধ
জাভা এবং নেটিভ কোড উভয়ের ডিবাগিংয়ের মধ্যে স্যুইচ করতে চাইলে এই ডিবাগ টাইপটি নির্বাচন করুন। অ্যান্ড্রয়েড স্টুডিও আপনার অ্যাপ প্রক্রিয়ার সাথে জাভা ডিবাগার এবং 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 পতাকা সেট করুন এবং শর্তসাপেক্ষ বিবৃতির ভিতরে ডিবাগ লগ বার্তাগুলি রাখুন।

সিস্টেম লগ দেখুন

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

লগক্যাট ব্যবহার করতে, ডিবাগিং শুরু করুন এবং লগক্যাট ট্যাবটি নির্বাচন করুন।

চিত্র ৪। ফিল্টার সেটিংস সহ লগক্যাট উইন্ডো।

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

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

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

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

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

একটি লাইন ব্রেকপয়েন্ট যোগ করতে, নিম্নলিখিতভাবে এগিয়ে যান:

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

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

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

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

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

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

  • কোনও পদ্ধতি প্রবেশ না করেই কোডের পরবর্তী লাইনে যেতে, Step Over এ ক্লিক করুন। .

  • একটি মেথড কলের প্রথম লাইনে যেতে, Step Into এ ক্লিক করুন। .

  • বর্তমান পদ্ধতির বাইরে পরবর্তী লাইনে যেতে, Step Out এ ক্লিক করুন। .

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

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

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

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

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

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

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

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

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

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

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

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

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

তালিকা থেকে একটি ব্রেকপয়েন্ট নির্বাচন করুন যাতে এর সেটিংস কনফিগার করা যায়। আপনি প্রথমে একটি ব্রেকপয়েন্টকে নিষ্ক্রিয় করার জন্য কনফিগার করতে পারেন এবং একটি ভিন্ন ব্রেকপয়েন্ট আঘাত করার পরে সিস্টেমটিকে এটি সক্ষম করতে বলতে পারেন। আঘাত করার পরে একটি ব্রেকপয়েন্ট অক্ষম করা উচিত কিনা তাও আপনি কনফিগার করতে পারেন। যেকোনো ব্যতিক্রমের জন্য একটি ব্রেকপয়েন্ট সেট করতে, ব্রেকপয়েন্টের তালিকায় Exception Breakpoints নির্বাচন করুন।

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

জানালার ফ্রেমগুলি ডিবাগ করুন

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

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

ভেরিয়েবল পরীক্ষা করুন

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

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

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

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

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

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

অবজেক্ট ট্রি থেকে একটি watched এক্সপ্রেশন অপসারণ করতে, এক্সপ্রেশনটিতে ডান-ক্লিক করুন এবং তারপর Remove Watch এ ক্লিক করুন।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. ভেরিয়েবল তালিকায়, তালিকাটি প্রদর্শনের জন্য রিসোর্স লাইনের যেকোনো জায়গায় ডান-ক্লিক করুন।
  2. তালিকায়, "হিসাবে দেখুন" নির্বাচন করুন এবং আপনি যে ফর্ম্যাটটি ব্যবহার করতে চান তা নির্বাচন করুন।

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

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

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

  1. রিসোর্স মানটিতে ডান ক্লিক করুন।
  2. "হিসাবে দেখুন" নির্বাচন করুন।
  3. তৈরি করুন নির্বাচন করুন।
  4. জাভা ডেটা টাইপ রেন্ডারার্স ডায়ালগটি প্রদর্শিত হবে। জাভা ডেটা টাইপ রেন্ডারার্স এর নির্দেশাবলী অনুসরণ করুন।