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

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

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

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

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

  • सामान्य envsetup.sh कमांड के साथ बिल्ड वातावरण सेट करें।
  • वही lunch कमांड चलाएँ जिसका उपयोग आपने निर्माण करते समय किया था। ध्यान दें कि लंच आइटम उस डिवाइस से बिल्कुल मेल खाना चाहिए जिसे आप डिबग कर रहे हैं। यदि लंच आइटम संलग्न डिवाइस से मेल नहीं खाता है, तो आपको फॉर्म में एक त्रुटि मिलेगी: You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
  • अपने डिवाइस को मशीन से कनेक्ट करें.

अपना परिवेश स्थापित करने में अधिक सहायता के लिए, परिवेश स्थापित करें देखें।

बाइनरी डिबगिंग

आपके द्वारा अपनी मशीन पर बनाई गई बाइनरी को डीबग करने के लिए, पहले आपको डिवाइस पर बाइनरी को कॉपी करना होगा और फिर डीबगर लॉन्च करना होगा। उदाहरण के लिए:

adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe

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

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

lldbclient.py -p 1234

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

मूल प्रक्रिया स्टार्टअप को डिबग करना

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

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

फिर, डिबगर के संकेत पर continue रखें दर्ज करें।

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

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

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

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

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

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.0 मार्शमैलो और निचला
    adb shell setprop debug.db.uid 999999
    

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

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

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

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

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

  1. सुनिश्चित करें कि lldbclient.py या lldbclient.py चलाने के लिए आवश्यक सभी बिल्ड कलाकृतियाँ (जैसे प्रतीक) मौजूद हैं।
  2. वीएस कोड में, कमांड चलाने के लिए Ctrl+Shift+P दबाएं, डीबग खोजें: कॉन्फ़िगरेशन जोड़ें... , फिर एलएलडीबी चुनें। यह एक launch.json फ़ाइल खोलता है और एक सूची में एक नया JSON ऑब्जेक्ट जोड़ता है।
  3. नए जोड़े गए डिबगर कॉन्फ़िगरेशन को दो टिप्पणी पंक्तियों के साथ बदलें - // #lldbclient-generated-begin और // #lldbclient-generated-end , ताकि आपकी कॉन्फ़िगरेशन सूची इस तरह दिखे:
    "configurations": [
        // #lldbclient-generated-begin
        // #lldbclient-generated-end
    ]

    lldbclient.py इन टिप्पणियों का उपयोग यह पता लगाने के लिए करता है कि कॉन्फ़िगरेशन कहाँ लिखना है। यदि सूची में अन्य आइटम हैं, तो अन्य कॉन्फ़िगरेशन के बाद टिप्पणी पंक्तियाँ अंत में जोड़ें।

  4. उस टर्मिनल में निम्नलिखित कमांड चलाएँ जहाँ आपने envsetup.sh और lunch चलाया है:
    lldbclient.py --setup-forwarding vscode-lldb \
          --vscode-launch-file LAUNCH_JSON_PATH \
          ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    lldbclient.py जेनरेट किए गए कॉन्फिगरेशन को launch.json में लिखता है और चलता रहता है। यह अपेक्षित है; lldbclient.py प्रोग्राम को बंद न करें। यदि आप --vscode-launch-file छोड़ देते हैं तो स्क्रिप्ट JSON स्निपेट प्रिंट कर देगी जिसे आपको मैन्युअल रूप से launch.json में कॉपी और पेस्ट करना होगा।

    यदि टूल द्वारा झंडों को पार्स करने के तरीके के कारण यह मौजूद है तो -r ध्वज अंतिम ध्वज होना चाहिए।

  5. रन और डीबग साइड बार खोलें - नया कॉन्फ़िगरेशन डीबगर सूची में दिखाई देना चाहिए। स्टार्ट डिबगिंग (F5) दबाएँ। डिबगर को 10 से 30 सेकंड के बाद कनेक्ट होना चाहिए।

    यदि नया कॉन्फ़िगरेशन रन और डीबग दृश्य में दिखाई नहीं देता है, तो डिबगर सूची को ताज़ा करने के लिए विंडो को पुनः लोड करें - Ctrl+Shift+P दबाएँ और reload window टाइप करें।

  6. जब आप डिबगिंग पूरी कर लें, तो lldbclient.py चलाने वाले टर्मिनल पर जाएं और lldbclient.py प्रोग्राम को समाप्त करने के लिए Enter दबाएँ। स्क्रिप्ट के बाद के रन #lldbclient-generated टिप्पणियों के बीच कॉन्फ़िगरेशन उत्पन्न करेंगे और पुरानी सामग्री को प्रतिस्थापित करेंगे, आपको उन्हें मैन्युअल रूप से हटाने की आवश्यकता नहीं है।

जनरेट किए गए लॉन्च कॉन्फ़िगरेशन में कस्टम गुण जोड़ने के लिए, आप --vscode-launch-props ध्वज का उपयोग कर सकते हैं। उदाहरण के लिए:

lldbclient.py --setup-forwarding vscode-lldb \
    --vscode-launch-props \
    '{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
    ...
उदाहरण गुण वीएस कोड को डिबगिंग से पहले Build नामक एक कार्य चलाएंगे और स्क्रिप्ट द्वारा उत्पन्न चरणों में एक नया डिबग आरंभीकरण चरण जोड़ देंगे। आप वीएस कोड दस्तावेज़ और कोडएलएलडीबी एक्सटेंशन के उपयोगकर्ता मैनुअल में उपलब्ध संपत्तियों का अवलोकन पा सकते हैं।