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

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

GDB को हटा दिया गया है और इसे जल्द ही हटा दिया जाएगा. आप GDB से LLDB पर स्विच कर रहे हैं, तो आप शायद पढ़कर शुरू कर देना चाहिए LLDB ट्यूटोरियल । आप एक विशेषज्ञ GDB उपयोगकर्ता हैं, तो GDB LLDB को आदेश नक्शा बहुत उपयोगी है, जबकि संक्रमण है।

आवश्यक शर्तें

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

  • हमेशा की तरह साथ निर्माण पर्यावरण सेट करें envsetup.sh आदेश।
  • एक ही चलाने के lunch आदेश आप जब निर्माण हुआ करता था।

अपने वातावरण की स्थापना के साथ और अधिक मदद के लिए, पर्यावरण की स्थापना की

चल रहे ऐप्स या प्रक्रियाओं को डीबग करना

किसी चल रहे एप्लिकेशन या देशी डेमॉन, उपयोग करने के लिए कनेक्ट करने के लिए gdbclient.py एक पीआईडी के साथ। उदाहरण के लिए, PID 1234 के साथ प्रक्रिया को डीबग करने के लिए, इसे होस्ट पर चलाएँ:

gdbclient.py -p 1234

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

डिबगिंग नेटिव प्रोसेस स्टार्टअप

एक प्रक्रिया डिबग करने के लिए के रूप में यह शुरू होता है, उपयोग gdbclient.py साथ -r विकल्प। उदाहरण के लिए, डिबग करने के लिए ls /bin , मेजबान पर इस चलाएँ:

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

फिर, में प्रवेश continue डिबगर के प्रॉम्प्ट पर।

डिबगिंग ऐप स्टार्टअप

कभी-कभी आप किसी ऐप डिबग करने के लिए चाहते हैं के रूप में यह इस तरह है जब वहाँ एक दुर्घटना के रूप में, शुरू होता है और आप कोड से निकलने के लिए देखने के लिए क्या दुर्घटना से पहले हुआ चाहते हैं। अटैच किया जा रहा कुछ मामलों में काम करता है, लेकिन अन्य मामलों में असंभव है क्योंकि एप्लिकेशन इससे पहले कि आप संलग्न कर सकते हैं दुर्घटनाओं। logwrapper दृष्टिकोण (के लिए इस्तेमाल किया strace ) एप्लिकेशन को एक बंदरगाह खोलने के लिए अनुमतियों और नहीं हो सकता क्योंकि हमेशा काम करता है gdbserver inherits कि प्रतिबंध।

ऐप स्टार्टअप को डीबग करने के लिए, सेटिंग में डेवलपर विकल्पों का उपयोग करके ऐप को जावा डीबगर के अटैच होने की प्रतीक्षा करने का निर्देश दें:

  1. सेटिंग> डेवलपर विकल्प> चुनें डिबग ऐप्स पर जाएं और सूची से अपने एप्लिकेशन चुनें, फिर डीबगर की प्रतीक्षा करें पर क्लिक करें।
  2. एप्लिकेशन शुरू, या तो लॉन्चर से या चलाने के लिए कमांड लाइन का उपयोग करके:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. ऐप के लोड होने की प्रतीक्षा करें और एक डायलॉग दिखाई दे जो आपको बताए कि ऐप डिबगर की प्रतीक्षा कर रहा है।
  4. संलग्न gdbserver / gdbclient सामान्य रूप से, सेट breakpoints, तो प्रक्रिया जारी है।

ऐप को चलने देने के लिए, जावा डीबग वायर प्रोटोकॉल (JDWP) डीबगर जैसे कि Java Debugger (jdb) संलग्न करें:

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

डिबगिंग ऐप्स या प्रोसेस जो क्रैश हो जाते हैं

यदि आप चाहते हैं debuggerd दुर्घटनाग्रस्त प्रक्रियाओं को निलंबित करने के लिए इतना है कि आप एक डिबगर संलग्न कर सकते हैं, उचित गुण सेट:

  • बाद एंड्रॉयड 11
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • एंड्रॉयड 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 निर्धारित नहीं कर सकता जो अनुदेश सेट यह वियोजन है (एआरएम या अंगूठे)। जब प्रतीक जानकारी गायब हो तो डिफ़ॉल्ट के रूप में चुने गए निर्देश सेट को निर्दिष्ट करने के लिए, निम्नलिखित गुण सेट करें:

set arm fallback-mode arm  # or thumb

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

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

डिबगिंग के लिए वी.एस. कोड उपयोग करने से पहले, स्थापित 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. वी.एस. कोड का चयन करें ऐड विन्यास में डीबगिंग टैब में, तो LLDB का चयन करें: कस्टम लॉन्च किया गया। यह एक खोलता launch.json फाइल और एक सूची में एक नया JSON ऑब्जेक्ट कहते हैं।
  4. नया जोड़ा गया डीबगर कॉन्फ़िगरेशन हटाएं।
  5. JSON ऑब्जेक्ट द्वारा मुद्रित कॉपी lldbclient.py और यह वस्तु आप बस नष्ट कर दिया में पेस्ट करें। परिवर्तनों को सुरक्षित करें।
  6. डिबगर सूची, Ctrl + Shift + P और प्रकार ताज़ा करने के लिए खिड़की को फिर से लोड करने के लिए reload window
  7. नई डिबगर विन्यास और प्रेस रन का चयन करें। डीबगर को 10 से 30 सेकंड के बाद कनेक्ट होना चाहिए।
  8. जब आप कर लें तो पूर्ण डीबगिंग, टर्मिनल चल करने के लिए जाना lldbclient.py और प्रेस समाप्त करने के लिए दर्ज करें lldbclient.py कार्यक्रम।