ডিবাগার ব্যবহার করে

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

OS ডেভেলপমেন্টের জন্য LLDB বা GDB ব্যবহার করে এই পৃষ্ঠার বিবরণ। অ্যাপ ডেভেলপমেন্টের জন্য, পরিবর্তে আপনার অ্যাপ ডিবাগ দেখুন, যা ব্যাখ্যা করে কিভাবে অ্যান্ড্রয়েড স্টুডিও জিইউআই ব্যবহার করতে হয় (এলএলডিবি-র উপর ভিত্তি করে)।

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

পূর্বশর্ত

একটি ডিবাগার ব্যবহার করতে:

  • স্বাভাবিক envsetup.sh কমান্ড দিয়ে বিল্ড এনভায়রনমেন্ট সেট আপ করুন।
  • নির্মাণের সময় আপনি যে একই lunch কমান্ড ব্যবহার করেছিলেন তা চালান।

আপনার পরিবেশ স্থাপনে আরও সহায়তার জন্য, পরিবেশ সেট আপ করুন দেখুন।

চলমান অ্যাপ বা প্রক্রিয়া ডিবাগ করা

একটি চলমান অ্যাপ বা নেটিভ ডেমনের সাথে সংযোগ করতে, একটি PID সহ gdbclient.py ব্যবহার করুন৷ উদাহরণস্বরূপ, PID 1234 দিয়ে প্রক্রিয়াটি ডিবাগ করতে, হোস্টে এটি চালান:

gdbclient.py -p 1234

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

নেটিভ প্রসেস স্টার্টআপ ডিবাগিং

একটি প্রক্রিয়া শুরু হওয়ার সাথে সাথে ডিবাগ করতে, -r বিকল্পের সাথে gdbclient.py ব্যবহার করুন। উদাহরণস্বরূপ, ls /bin ডিবাগ করতে, হোস্টে এটি চালান:

gdbclient.py -r /system/bin/ls /bin

তারপর, ডিবাগারের প্রম্পটে continue যান প্রবেশ করুন।

ডিবাগিং অ্যাপ স্টার্টআপ

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

অ্যাপ স্টার্টআপ ডিবাগ করতে, একটি জাভা ডিবাগার সংযুক্ত করার জন্য অ্যাপটিকে অপেক্ষা করতে নির্দেশ দিতে সেটিংসে বিকাশকারী বিকল্পগুলি ব্যবহার করুন:

  1. সেটিংস > বিকাশকারী বিকল্পগুলিতে যান > ডিবাগ অ্যাপ নির্বাচন করুন এবং তালিকা থেকে আপনার অ্যাপ চয়ন করুন, তারপর ডিবাগারের জন্য অপেক্ষা করুন ক্লিক করুন।
  2. অ্যাপটি শুরু করুন, হয় লঞ্চার থেকে বা চালানোর জন্য কমান্ড লাইন ব্যবহার করে:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. অ্যাপটি লোড হওয়ার জন্য অপেক্ষা করুন এবং একটি ডায়ালগ প্রদর্শিত হবে যা আপনাকে বলে যে অ্যাপটি একটি ডিবাগারের জন্য অপেক্ষা করছে।
  4. সাধারণত gdbserver / gdbclient সংযুক্ত করুন, ব্রেকপয়েন্ট সেট করুন, তারপর প্রক্রিয়াটি চালিয়ে যান।

অ্যাপটি চালানোর জন্য, একটি জাভা ডিবাগ ওয়্যার প্রোটোকল (JDWP) ডিবাগার সংযুক্ত করুন যেমন Java Debugger (jdb):

adb forward tcp:12345 jdwp:XXX  # (Where XXX is the PID
of the debugged process.)
jdb -attach localhost:12345

ডিবাগিং অ্যাপ বা প্রক্রিয়া যে ক্র্যাশ

আপনি যদি ডিবাগারকে ক্র্যাশ হওয়া প্রক্রিয়াগুলি স্থগিত করতে চান যাতে আপনি একটি debuggerd সংযুক্ত করতে পারেন, উপযুক্ত সম্পত্তি সেট করুন:

  • Android 11 এর পরে
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • Android 11 এবং নিম্ন
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • Android 6.0 Marshmallow এবং নিম্ন
    adb shell setprop debug.db.uid 999999
    

স্বাভাবিক ক্র্যাশ আউটপুট শেষে, debuggerd logcat-এ কপি এবং পেস্ট নির্দেশাবলী প্রদান করে যা দেখায় কিভাবে ডিবাগারকে ক্র্যাশ প্রক্রিয়ার সাথে সংযুক্ত করতে হয়।

চিহ্ন ছাড়াই ডিবাগিং

32-বিট এআরএম-এর জন্য, যদি আপনার কাছে চিহ্ন না থাকে, তাহলে gdb নির্ধারণ করতে পারে না কোন নির্দেশনা সেটটি বিচ্ছিন্ন করা হচ্ছে (ARM বা থাম্ব)। প্রতীক তথ্য অনুপস্থিত থাকাকালীন ডিফল্ট হিসাবে নির্বাচিত নির্দেশ সেট নির্দিষ্ট করতে, নিম্নলিখিত বৈশিষ্ট্য সেট করুন:

set arm fallback-mode arm  # or thumb

VS কোড দিয়ে ডিবাগিং

LLDB ভিজ্যুয়াল স্টুডিও কোডে ডিবাগিং প্ল্যাটফর্ম কোড সমর্থন করে। ডিভাইসে চলমান নেটিভ কোড নিয়ন্ত্রণ এবং ডিবাগ করতে আপনি LLDB CLI ইন্টারফেসের পরিবর্তে VS কোড ডিবাগার ফ্রন্টএন্ড ব্যবহার করতে পারেন।

ডিবাগিংয়ের জন্য VS কোড ব্যবহার করার আগে, CodeLLDB এক্সটেনশনটি ইনস্টল করুন।

VS কোড ব্যবহার করে কোড ডিবাগ করতে:

  1. gdbclient.py বা lldbclient.py চালানোর জন্য প্রয়োজনীয় সমস্ত বিল্ড আর্টিফ্যাক্ট (যেমন প্রতীক) উপস্থিত রয়েছে তা নিশ্চিত করুন।
  2. নিম্নলিখিত কমান্ডটি চালান:
    lldbclient.py --setup-forwarding
          vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    এটি একটি JSON অবজেক্ট প্রিন্ট করে এবং lldbclient.py চলতে থাকে। এটা প্রত্যাশিত; lldbclient.py প্রোগ্রামটি মেরে ফেলবেন না।

    -r পতাকাটি অবশ্যই শেষ পতাকা হতে হবে যদি এটি টুল দ্বারা পতাকার পার্স করার কারণে উপস্থিত থাকে।

  3. ভিএস কোডের ডিবাগিং ট্যাবে, অ্যাড কনফিগারেশন নির্বাচন করুন, তারপরে এলএলডিবি: কাস্টম লঞ্চ নির্বাচন করুন। এটি একটি launch.json ফাইল খোলে এবং একটি তালিকায় একটি নতুন JSON অবজেক্ট যোগ করে।
  4. নতুন যোগ করা ডিবাগার কনফিগারেশন মুছুন।
  5. lldbclient.py দ্বারা মুদ্রিত JSON অবজেক্টটি অনুলিপি করুন এবং আপনি এইমাত্র মুছে ফেলা বস্তুতে পেস্ট করুন। পরিবর্তনগুলি সংরক্ষণ করুন।
  6. ডিবাগার তালিকা রিফ্রেশ করতে উইন্ডোটি পুনরায় লোড করতে, Ctrl+Shift+P টিপুন এবং reload window টাইপ করুন।
  7. নতুন ডিবাগার কনফিগারেশন নির্বাচন করুন এবং রান টিপুন। ডিবাগার 10 থেকে 30 সেকেন্ড পরে সংযোগ করা উচিত।
  8. আপনার ডিবাগিং শেষ হলে, lldbclient.py চলমান টার্মিনালে যান এবং lldbclient.py প্রোগ্রামটি শেষ করতে এন্টার টিপুন।