डिबगर्स का उपयोग करना

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

यह पृष्ठ OS विकास के लिए LLDB या GDB का उपयोग करने का विवरण देता है। ऐप डेवलपमेंट के लिए, इसके बजाय अपने ऐप को डीबग करें देखें, जो बताता है कि एंड्रॉइड स्टूडियो जीयूआई (एलएलडीबी पर आधारित) का उपयोग कैसे करें।

GDB को हटा दिया गया है और इसे जल्द ही हटा दिया जाएगा. यदि आप जीडीबी से एलएलडीबी में स्विच कर रहे हैं, तो आपको शायद एलएलडीबी ट्यूटोरियल पढ़कर शुरुआत करनी चाहिए। यदि आप एक विशेषज्ञ 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
    
    6
  • Android 6.0 मार्शमैलो और निचला
    adb shell setprop debug.db.uid 999999
    

सामान्य क्रैश आउटपुट के अंत में, debuggerd लॉगकैट में कॉपी और पेस्ट निर्देश प्रदान करता है जिसमें दिखाया गया है कि डीबगर को क्रैश प्रक्रिया से कैसे जोड़ा जाए।

प्रतीकों के बिना डिबगिंग

32-बिट एआरएम के लिए, यदि आपके पास प्रतीक नहीं हैं, तो gdb यह निर्धारित नहीं कर सकता कि यह कौन सा निर्देश सेट है (एआरएम या थंब)। जब प्रतीक जानकारी गायब हो तो डिफ़ॉल्ट के रूप में चुने गए निर्देश सेट को निर्दिष्ट करने के लिए, निम्नलिखित गुण सेट करें:

set arm fallback-mode arm  # or thumb

वीएस कोड के साथ डिबगिंग

एलएलडीबी विजुअल स्टूडियो कोड पर डिबगिंग प्लेटफॉर्म कोड का समर्थन करता है। उपकरणों पर चल रहे मूल कोड को नियंत्रित और डीबग करने के लिए आप एलएलडीबी सीएलआई इंटरफ़ेस के बजाय वीएस कोड डीबगर फ्रंटएंड का उपयोग कर सकते हैं।

डिबगिंग के लिए VS कोड का उपयोग करने से पहले, CodeLLDB एक्सटेंशन इंस्टॉल करें।

वीएस कोड का उपयोग करके कोड डीबग करने के लिए:

  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 प्रोग्राम को समाप्त करने के लिए एंटर दबाएं।