डीबगर का इस्तेमाल करें

इस पेज के बारे में LLDB का इस्तेमाल करके जानकारी दी गई है का इस्तेमाल किया जा सकता है. ऐप्लिकेशन डेवलपमेंट के लिए, यहां जाएं अपने ऐप्लिकेशन को डीबग करना के बजाय, 'Android स्टूडियो जीयूआई' (एलएलडीबी पर आधारित) के इस्तेमाल का तरीका बताता है.

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

ज़रूरी शर्तें

डीबगर का इस्तेमाल करने के लिए:

  • सामान्य 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

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

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

lldbclient.py -p 1234

स्क्रिप्ट, पोर्ट फ़ॉरवर्डिंग को सेट अप करती है और सही डिवाइस पर रिमोट डीबगिंग स्टब, डीबगर को चालू करता है होस्ट, इसे सिंबल ढूंढने के लिए कॉन्फ़िगर करता है, और इसे रिमोट डीबगिंग स्टब पर भेज दिया जाता है.

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

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

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

इसके बाद, डीबगर के प्रॉम्प्ट पर continue डालें.

ऐप्लिकेशन का स्टार्टअप डीबग करें

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

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

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

ऐप्लिकेशन को चलाने के लिए, Java डीबग वायर प्रोटोकॉल (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 में, क्रैश होने वाली प्रोसेस से डीबगर को कनेक्ट करने का तरीका दिखाने वाले निर्देश.

बनाम कोड से डीबग करें

एलएलडीबी, इस प्लैटफ़ॉर्म पर प्लैटफ़ॉर्म कोड डीबग करने की सुविधा देता है विज़ुअल स्टूडियो कोड. इसके लिए, एलएलडीबी सीएलआई इंटरफ़ेस के बजाय वीएस कोड डीबगर फ़्रंटएंड का इस्तेमाल करके, डिवाइस पर चलने वाले नेटिव कोड को डीबग करें.

डीबग करने के लिए वीएस कोड का इस्तेमाल करने से पहले, CodeLLDB एक्सटेंशन.

बनाम कोड का इस्तेमाल करके कोड को डीबग करने के लिए:

  1. पक्का करें कि सभी बिल्ड आर्टफ़ैक्ट (जैसे कि सिंबल) को चलाना ज़रूरी है lldbclient.py या lldbclient.py मौजूद हैं.
  2. वीएस कोड में, Ctrl+Shift+P दबाकर कोई निर्देश चलाएं और DebugView: कॉन्फ़िगरेशन जोड़ें..., फिर LLDB चुनें. इससे एक 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. Run और Debug साइड बार खोलें - नया कॉन्फ़िगरेशन डीबगर सूची. डीबग करना शुरू करें (F5) दबाएं. डीबगर को इसके बाद कनेक्ट होना चाहिए 10 से 30 सेकंड.

    अगर 'रन और डीबग करें' व्यू में नया कॉन्फ़िगरेशन नहीं दिखता है, तो डीबगर सूची रीफ़्रेश करें - Ctrl+Shift+P दबाएं और reload window.

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

जनरेट किए गए लॉन्च कॉन्फ़िगरेशन में कस्टम प्रॉपर्टी जोड़ने के लिए, --vscode-launch-props फ़्लैग. जैसे:

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