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

Android Studio एक डीबगर उपलब्ध कराता है, जिसकी मदद से ये काम और दूसरे काम किए जा सकते हैं:

  • अपने ऐप्लिकेशन को डीबग करने के लिए कोई डिवाइस चुनें.
  • अपने Java, Kotlin, और C/C++ कोड में ब्रेकपॉइंट सेट करें.
  • रनटाइम के दौरान वैरिएबल की जांच करें और एक्सप्रेशन का आकलन करें.

इस पेज में बुनियादी डीबगर ऑपरेशन के निर्देश शामिल हैं. अन्य दस्तावेज़ों के लिए भी, IntellaJ IDEA डीबग करने वाले दस्तावेज़ देखें.

डीबग करने की सुविधा चालू करें

डीबग करने से पहले, ये काम करें:

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

ऐसे बिल्ड वैरिएंट का इस्तेमाल करें जिसे debuggable true शामिल है (Kotlin स्क्रिप्ट मेंisDebuggable = true) बिल्ड कॉन्फ़िगरेशन में.

आम तौर पर, आपके पास डिफ़ॉल्ट "डीबग" चुनने का विकल्प होता है ऐसा वैरिएंट जो हर Android Studio में शामिल होता है प्रोजेक्ट होना चाहिए, भले ही यह build.gradle फ़ाइल में न दिख रहा हो. हालांकि, अगर आपको नए बिल्ड टाइप को परिभाषित करें, जो डीबग करने लायक हों, आपको debuggable true जोड़ना होगा बिल्ड टाइप में जोड़ें:

ग्रूवी

android {
    buildTypes {
        customDebugType {
            debuggable true
            ...
        }
    }
}

Kotlin

android {
    buildTypes {
        create("customDebugType") {
            isDebuggable = true
            ...
        }
    }
}

यह प्रॉपर्टी, C/C++ कोड वाले मॉड्यूल पर भी लागू होती है.

ध्यान दें: अब jniDebuggable प्रॉपर्टी का इस्तेमाल नहीं किया जाता.

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

डीबग करना शुरू करें

डीबग करने का सेशन इस तरह शुरू किया जा सकता है:

  1. अपने ऐप्लिकेशन के कोड में ब्रेकपॉइंट सेट करें.
  2. टूलबार में, टारगेट डिवाइस मेन्यू से अपने ऐप्लिकेशन को डीबग करने के लिए कोई डिवाइस चुनें.
    टारगेट डिवाइस का मेन्यू.
    पहली इमेज. टारगेट डिवाइस का मेन्यू.

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

  3. टूलबार में, डीबग करें पर क्लिक करें.

    अगर इस डिवाइस पर आपका ऐप्लिकेशन पहले से चल रहा है, तो एक डायलॉग दिखेगा. इसमें पूछा जाएगा कि क्या आपको 'रन से डीबग करें' पर स्विच करें. डीबग करना शुरू करने के लिए डिवाइस को रीस्टार्ट करना होगा. यहां की यात्रा पर हूं ऐप्लिकेशन के उसी इंस्टेंस को बनाए रखें, डीबग रद्द करें पर क्लिक करें और इसके बजाय चल रहे ऐप्लिकेशन के साथ डीबगर को अटैच करें. अगर ऐसा नहीं है, तो Android Studio APK बनाता है, डीबग पासकोड से साइन करता है, उसे आपके चुने हुए डिवाइस पर इंस्टॉल करता है, और उसे चलाता है.

    अगर आपको अपने प्रोजेक्ट में C और C++ कोड जोड़ें, Android Studio, डीबग में एलएलडीबी डीबगर भी चलाता है विंडो का इस्तेमाल करें.

  4. अगर डीबग विंडो नहीं खुली है, तो View > टूल की विंडो > डीबग, या टूल विंडो बार में, डीबग करें पर क्लिक करें.

चल रहे ऐप्लिकेशन में डीबगर को अटैच करें

अगर आपका ऐप्लिकेशन आपके डिवाइस पर पहले से चल रहा है, तो बिना डीबग किए डीबग करना शुरू किया जा सकता है ऐप्लिकेशन को रीस्टार्ट करने का तरीका:

  1. Android प्रोसेस से डीबगर को अटैच करें पर क्लिक करें.
  2. प्रोसेस चुनें डायलॉग में, अपनी पसंद की प्रोसेस चुनें डीबगर को इसमें अटैच करें.
    1. अगर एम्युलेटर या रूट किए गए डिवाइस का इस्तेमाल किया जा रहा है, तो सभी प्रोसेस देखने के लिए, सभी प्रोसेस दिखाएं. रूट किए गए डिवाइस पर, यह सब दिखेगा डिवाइस पर चल रही प्रक्रियाएं तय करें. हालांकि, रूट न किए गए डिवाइस पर यह सिर्फ़ डीबग करने लायक प्रोसेस.
    2. यहां से 'Android डीबगर की सेटिंग का इस्तेमाल करें' मेन्यू में जाकर, किसी मौजूदा रन/डीबग कॉन्फ़िगरेशन. C और C++ कोड के लिए, इसकी मदद से, LLDB के स्टार्टअप कमांड, LLDB के पोस्ट-अटैचमेंट वाले कमांड, और सिंबल को फिर से इस्तेमाल किया जा सकता है मौजूदा कॉन्फ़िगरेशन में मौजूद डायरेक्ट्री.
    3. अगर आपके पास पहले से कोई रन/डीबग नहीं है कॉन्फ़िगरेशन में, नया बनाएं चुनें. इस विकल्प को चुनने पर, डीबग टाइप चालू हो जाता है मेन्यू की मदद से, कोई दूसरा डीबग टाइप चुना जा सकता है. इन्होंने बदलाव किया है डिफ़ॉल्ट है, तो Android Studio 'अपने-आप डीबग करें' टाइप का इस्तेमाल करता है, ताकि आपके लिए डीबगर विकल्प का उपयोग करेगा, जो आपके प्रोजेक्ट में Java या C/C++ कोड शामिल होने के आधार पर तय होता है.
  3. ठीक है पर क्लिक करें.

    आपको डीबग विंडो दिखेगी.

डिवाइस एक्सप्लोरर में प्रोसेस टैब (व्यू > टूल Windows > डिवाइस एक्सप्लोरर) इसमें डीबग की जा सकने वाली प्रोसेस की सूची भी मौजूद है. वहां से कोई प्रोसेस चुनकर उसे मार गिराएं , फ़ोर्स-स्टॉप , या डीबगर को दी गई प्रोसेस से अटैच करें .

डीबग विंडो

दूसरी इमेज.डीबग विंडो.

डीबग विंडो को

  1. एक्ज़ीक्यूशन और नेविगेशन टूलबार देखें ब्रेकपॉइंट के साथ काम करें देखें
  2. थ्रेड चुनने वाला टूल
  3. आकलन और वॉच एक्सप्रेशन की एंट्री. वैरिएबल की जांच करना देखें.
  4. स्टैक डिसप्ले
  5. वैरिएबल पैनल. वैरिएबल की जांच करना देखें.

ध्यान दें: Android Studio डीबगर और गार्बेज कलेक्टर आसानी से इंटिग्रेट हो जाता है. Android वर्चुअल मशीन यह गारंटी देती है कि डीबगर को पता है कि डीबगर जब तक कचरा इकट्ठा नहीं करता, तब तक उसे इकट्ठा नहीं किया जाता डिसकनेक्ट करता है. इसकी वजह से ऑब्जेक्ट इकट्ठा हो सकते हैं, जबकि डीबगर कनेक्ट हो गया है. उदाहरण के लिए, अगर डीबगर को चल रहा थ्रेड दिखता है, संबंधित Thread डीबगर के डिसकनेक्ट होने तक ऑब्जेक्ट इकट्ठा नहीं किया जाता, भले ही थ्रेड खत्म हो गया हो.

डीबगर का टाइप बदलें

Java/Kotlin कोड और C/C++ कोड को डीबग करने के लिए, अलग-अलग डीबगर टूल की ज़रूरत होती है, इसलिए Android Studio डीबगर की मदद से, यह चुना जा सकता है कि किस तरह के डीबगर का इस्तेमाल करना है. डिफ़ॉल्ट रूप से, Android Studio यह तय करता है कि आपके प्रोजेक्ट में किस भाषा का पता चलता है. इसके आधार पर, डीबगर टाइप का अपने-आप पता लगाएं.

डीबग कॉन्फ़िगरेशन में डीबगर को मैन्युअल तरीके से चुनने के लिए, Run > पर क्लिक करें संपादित करें कॉन्फ़िगरेशन. आप डायलॉग बॉक्स में डीबगर को भी चुन सकते हैं. यह डायलॉग बॉक्स आपको Run > Android प्रोसेस में डीबगर अटैच करें.

उपलब्ध डीबग टाइप में ये शामिल हैं:

इमेज का अपने-आप पता लगाएं
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अगर आपको Android Studio से अपने-आप सही विकल्प चुनने की सुविधा चालू करनी है, तो यह डीबग टाइप चुनें उस कोड के लिए जिसे आप डीबग कर रहे हैं. उदाहरण के लिए, अगर आपके पास C या C++ आपके प्रोजेक्ट में, Android Studio अपने-आप Dual डीबग का इस्तेमाल करता है टाइप करें. अगर ऐसा नहीं है, तो Android Studio, डीबग करने के लिए Java का इस्तेमाल करता है.
सिर्फ़ Java के लिए
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अगर आपको सिर्फ़ Java या Kotlin में लिखे कोड को डीबग करना है, तो यह डीबग टाइप चुनें. सिर्फ़ Java के लिए डीबगर आपके नेटिव कोड में सेट किए गए किसी भी ब्रेकपॉइंट या घड़ियों को अनदेखा कर देता है.
सिर्फ़ नेटिव विज्ञापन (सिर्फ़ C/C++ कोड के साथ उपलब्ध)
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अगर आपको अपने कोड को डीबग करने के लिए, सिर्फ़ एलएलडीबी का इस्तेमाल करना है, तो इस डीबग टाइप को चुनें. इसका इस्तेमाल करते समय डीबग टाइप, Java डीबगर सेशन व्यू उपलब्ध नहीं है. डिफ़ॉल्ट रूप से, LLDB सिर्फ़ आपके नेटिव कोड की जांच करता है और आपके Java में ब्रेकपॉइंट को अनदेखा करता है कोड. अगर आपको अपना Java कोड भी डीबग करना है, तो किसी एक पर स्विच करें 'अपने-आप पहचानें' या 'ड्यूअल डीबग टाइप' में से किसी एक को चुनें.

नेटिव डीबग सिर्फ़ उन डिवाइसों पर काम करती है जो नीचे दी गई शर्तें पूरी करते हैं:

  • इस डिवाइस पर run-as काम करता है.

    यह देखने के लिए कि इस डिवाइस पर run-as काम करता है या नहीं, यहां दिए गए निर्देश को इस पर चलाएं आपके डिवाइस से कनेक्ट किया गया ADB शेल:

    run-as your-package-name pwd
    

    your-package-name को अपने ऐप्लिकेशन के पैकेज नाम से बदलें. अगर डिवाइस पर run-as काम करता है, तो निर्देश बिना किसी गड़बड़ी के वापस आना चाहिए.

  • डिवाइस में ptrace चालू है.

    यह देखने के लिए कि ptrace चालू है या नहीं, ADB पर नीचे दिया गया निर्देश चलाएं शेल भी खोजें:

    sysctl kernel.yama.ptrace_scope
    

    अगर ptrace चालू है, तो निर्देश 0 या unknown key गड़बड़ी. अगर ptrace चालू नहीं है, तो यह 0 के अलावा अन्य मान.

Dual (Java + नेटिव) - सिर्फ़ C/C++ कोड के साथ उपलब्ध है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अगर आपको Java और नेटिव कोड, दोनों को डीबग करने के बीच स्विच करना है, तो इस डीबग टाइप को चुनें. Android Studio, आपके ऐप्लिकेशन में Java डीबगर और एलएलडीबी, दोनों को अटैच करता है ताकि गड़बड़ी की जांच की जा सके. ऐप्लिकेशन को रीस्टार्ट किए बिना, आपके Java और नेटिव कोड, दोनों में ब्रेकपॉइंट या अपने डीबग कॉन्फ़िगरेशन को बदलकर.

दूसरी इमेज में, डीबग विंडो के टाइटल की दाईं ओर मौजूद दो टैब पर नज़र डालें. ऐप्लिकेशन में Java और C++ कोड, दोनों का इस्तेमाल किया गया है. इसलिए, नेटिव को डीबग करने के लिए एक टैब कोड और दूसरा, जैसा कि -java से दिखाया गया है.

तीसरी इमेज. नेटिव कोड और टैब को डीबग करने के लिए Tab का इस्तेमाल करें.

ध्यान दें: कंपाइलर, आपको चेतावनी वाला यह मैसेज दिख सकता है:
This function was compiled with optimizations enabled. Some debugger features may not be available. ऑप्टिमाइज़ेशन फ़्लैग का इस्तेमाल करते समय, कंपाइलर आपके कोड कंपाइल किया जा सकता है, ताकि वह और बेहतर तरीके से चल सके. इससे डीबगर अचानक या गलत जानकारी की शिकायत करें, क्योंकि यह डीबगर, ताकि ऑप्टिमाइज़ किए गए कंपाइल किए गए कोड को वापस ओरिजनल सोर्स कोड से मैप किया जा सके. इस वजह से, आपको डीबग करते समय कंपाइलर ऑप्टिमाइज़ेशन को बंद कर देना चाहिए आपका नेटिव कोड.

सिस्टम लॉग का इस्तेमाल करना

ऐप्लिकेशन को डीबग करने के दौरान, सिस्टम लॉग सिस्टम के मैसेज दिखाता है. इन मैसेज में ये शामिल हैं: डिवाइस पर चल रहे ऐप्लिकेशन की जानकारी. अगर आपको Google Ads API का इस्तेमाल करना है, सिस्टम लॉग का इस्तेमाल करके, ऐप्लिकेशन को डीबग करने के लिए, पक्का करें कि आपका कोड लॉग मैसेज लिखता है और स्टैक को प्रिंट करता है ट्रेस करें.

अपने कोड में लॉग मैसेज लिखें

अपने कोड में लॉग मैसेज लिखने के लिए, Log क्लास का इस्तेमाल करें. लॉग मैसेज से जुड़ी सहायता सिस्टम डीबग आउटपुट को इकट्ठा करके, एक्ज़ीक्यूशन फ़्लो को समझा जा सकता है आपके ऐप्लिकेशन के साथ कैसे इंटरैक्ट करते हैं. लॉग मैसेज से आपको यह भी पता चल सकता है कि ऐप्लिकेशन डाउनलोड नहीं हो सका. लॉगिंग के बारे में ज़्यादा जानकारी के लिए देखें Logcat की मदद से लॉग लिखें और देखें.

यहां दिए गए उदाहरण में, लॉग मैसेज जोड़ने का तरीका बताया गया है. इससे यह पता चल पाएगा कि पिछली स्थिति क्या थी आपकी गतिविधि के शुरू होने पर, जानकारी उपलब्ध होती है:

Kotlin

import android.util.Log
...
class MyActivity : Activity() {
    ...
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state")
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available")
            /* initialize app */
        }
        ...
    }
  ...
  companion object {
    private val TAG: String = MyActivity::class.java.simpleName
    ...
  }
}

Java

import android.util.Log;
...
public class MyActivity extends Activity {
    private static final String TAG = MyActivity.class.getSimpleName();
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
       ...
       if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state");
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available");
            /* initialize app */
        }
        ...
    }
}

डेवलपमेंट के दौरान, आपका कोड अपवादों को भी पकड़ सकता है और सिस्टम में स्टैक ट्रेस लिख सकता है लॉग:

Kotlin

fun someOtherMethod() {
    try {
        ...
    } catch (e : SomeException) {
        Log.d(TAG, "someOtherMethod()", e)
    }
}

Java

void someOtherMethod() {
    try {
        ...
    } catch (SomeException e) {
        Log.d(TAG, "someOtherMethod()", e);
    }
}

ध्यान दें: डीबग लॉग मैसेज और स्टैक ट्रेस प्रिंट कॉल को यहां से हटाएं जब आप अपना ऐप्लिकेशन पब्लिश करने के लिए तैयार हों, तो अपने कोड से साइन इन करें. ऐसा करने के लिए, DEBUG सेट करें डिबग लॉग मैसेज को कंडिशनल स्टेटमेंट में फ़्लैग करें और रखें.

सिस्टम लॉग देखें

डीबग और अन्य सिस्टम मैसेज, Logcat विंडो में देखे और फ़िल्टर किए जा सकते हैं, जैसा कि यहां दिखाया गया है चौथी इमेज में दिखाया गया है. उदाहरण के लिए, कचरा इकट्ठा होने पर आपको मैसेज दिख सकते हैं. इसके अलावा, आप Log क्लास.

Logcat का इस्तेमाल करने के लिए, डीबग करना शुरू करें. इसके बाद, Logcat टैब चुनें.

चौथी इमेज. फ़िल्टर सेटिंग के साथ लॉगकैट विंडो.

Logcat और उसे फ़िल्टर करने के विकल्पों की जानकारी के लिए, देखें Logcat की मदद से लॉग लिखें और देखें.

ब्रेकपॉइंट इस्तेमाल करके काम करना

Android Studio ऐसे ब्रेकपॉइंट की सुविधा देता है जो अलग-अलग डीबगिंग कार्रवाइयां ट्रिगर करता है. ब्रेकपॉइंट कई तरह के होते हैं:

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

आपके पास कंडिशनल ब्रेकपॉइंट सेट करने का विकल्प है. ऐसा करने पर, एक्ज़ीक्यूशन सिर्फ़ कुछ शर्तों के होने पर ही निलंबित होगा लक्ष्य तय होते हैं. लॉग इन करने के लिए ब्रेकपॉइंट भी सेट किए जा सकते हैं, जो निलंबित किए बिना Logcat पर लिखते हैं लागू करता है. इससे, लॉग स्टेटमेंट से आपके कोड में होने वाली गड़बड़ियों से बचा जा सकता है.

लाइन ब्रेकपॉइंट जोड़ने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. कोड की उस लाइन पर जाएं जहां आपको एक्ज़ीक्यूशन को रोकना है.
  2. कोड की उस लाइन के साथ, बाएं गटर पर क्लिक करें या कैरेट को लाइन पर रखें और Control+F8 (macOS पर, Command+F8) दबाएं.
  3. अगर आपका ऐप्लिकेशन पहले से चल रहा है, तो Android प्रोसेस में डीबगर अटैच करें पर क्लिक करें . अगर ऐसा नहीं है, तो डीबग करना शुरू करने के लिए, डीबग पर क्लिक करें .

जब ब्रेकपॉइंट सेट किया जाता है, तब लाइन के बगल में लाल बिंदु दिखता है, जैसा कि पांचवीं इमेज में दिखाया गया है.

पांचवीं इमेज. इसके बगल में एक लाल बिंदु दिखाई देता है लाइन में बदलाव करें.

जब कोड एक्ज़ीक्यूट होता है, तो वह ब्रेकपॉइंट पर पहुंच जाता है. Android Studio आपके ऐप्लिकेशन का एक्ज़ीक्यूशन रोक देता है.

ऐप्लिकेशन की स्थिति की पहचान करने के लिए, डीबगर टैब में मौजूद टूल का इस्तेमाल करें:

  • किसी वैरिएबल के लिए ऑब्जेक्ट ट्री की जांच करने के लिए, उसे वैरिएबल व्यू में बड़ा करें. अगर आपने वैरिएबल व्यू नहीं दिख रहा है, तो लेआउट सेटिंग पर क्लिक करें और पक्का करें कि वैरिएबल पर सही का निशान लगा हो.

  • कोई तरीका डाले बिना कोड में अगली लाइन पर जाने के लिए, चरण से ज़्यादा.

  • तरीके के कॉल में पहली लाइन पर जाने के लिए, चरण पर क्लिक करें में.

  • मौजूदा तरीके से बाहर की लाइन पर जाने के लिए, चरण पर क्लिक करें आउट हो गया.

  • ऐप्लिकेशन को सामान्य तरीके से चलाना जारी रखने के लिए, प्रोग्राम को फिर से शुरू करें पर क्लिक करें .

अगर आपके प्रोजेक्ट में किसी भी नेटिव कोड का इस्तेमाल किया जाता है, तो डिफ़ॉल्ट रूप से 'अपने-आप डीबग करें' टाइप यह आपके ऐप्लिकेशन में Java डीबगर और एलएलडीबी, दोनों को दो अलग-अलग प्रोसेस. Java और C/C++ ब्रेकपॉइंट की जांच करने के बीच स्विच किया जा सकता है और सेटिंग को बदले बिना.

ध्यान दें: Android Studio को अपने C या C++ कोड में ब्रेकपॉइंट का पता लगाने के लिए, आपको एक ऐसे डीबग टाइप का इस्तेमाल करना होगा जो एलएलडीबी के साथ काम करता हो, जैसे कि अपने-आप पता लगाना, नेटिव या दोहरा. Android Studio, डीबग के जिस टाइप का इस्तेमाल करता है उसे बदला जा सकता है. इसके लिए, आपको डीबग कॉन्फ़िगरेशन में बदलाव करना होगा. यहां की यात्रा पर हूं अलग-अलग तरह के डीबग टाइप के बारे में ज़्यादा जानें. साथ ही, अन्य डीबग टाइप.

जब Android Studio आपके ऐप्लिकेशन को टारगेट किए गए डिवाइस पर डिप्लॉय करता है, तो डीबग विंडो हर डीबगर प्रोसेस के लिए, एक टैब या डीबग सेशन व्यू के साथ खुलता है, जैसा कि दिखाया गया है छठी इमेज में दिखाया गया है.

छठी इमेज. एलएलडीबी का इस्तेमाल करके, नेटिव कोड को डीबग करना.
  1. Android Studio <your-module> टैब, जब एलएलडीबी डीबगर को ब्रेकपॉइंट इस्तेमाल करें. फ़्रेम, वैरिएबल, और घड़ियों के पैनल भी उपलब्ध होते हैं और ठीक वैसे ही काम करते हैं, जैसे वे Java कोड को डीबग कर रहे थे.

    हालांकि, Threads पैनल उपलब्ध नहीं है एलएलडीबी सेशन व्यू में, अपने ऐप्लिकेशन की प्रोसेस ऐक्सेस करने के लिए सूची खोलें. इनके बारे में ज़्यादा जानें डीबग विंडो' करने का तरीका बताने वाले सेक्शन के पैनल फ़्रेम और वैरिएबल की जांच करें.

    ध्यान दें: अपने नेटिव कोड में ब्रेकपॉइंट की जांच करते समय, Android सिस्टम, आपके ऐप्लिकेशन के Java को चलाने वाली वर्चुअल मशीन को निलंबित कर देता है बाइट कोड डालें. इसका मतलब है कि आप Java के साथ इंटरैक्ट नहीं कर सकते डीबगर या अपने Java डीबगर से किसी भी राज्य की जानकारी हासिल करें सेशन के दौरान ब्रेकपॉइंट की जांच करते समय अपने नेटिव कोड की जांच करें.

  2. Android Studio Java डीबगर के होने पर <your-module>-JavaScript टैब आपके Java या Kotlin कोड में ब्रेकपॉइंट का पता लगाता है.
  3. एलएलडीबी के साथ डीबग करते समय, एलएलडीबी टर्मिनल का इस्तेमाल एलएलडीबी को कमांड-लाइन के विकल्पों को पास करने के लिए, एलएलडीबी सेशन व्यू. अगर आपने पक्का किया है कि वे कमांड जिन्हें आपको हर बार डीबगिंग शुरू करते समय एलएलडीबी को एक्ज़ीक्यूट करना है आपका ऐप्लिकेशन, डीबगर के आपके डाउनलोड करके, आप उन कमांड को अपने डीबग कॉन्फ़िगरेशन में जोड़ें.

C/C++ कोड को डीबग करते समय, खास तरह के ब्रेकपॉइंट सेट किए जा सकते हैं, वॉचपॉइंट कहा जाता है. इसकी मदद से, ऐप्लिकेशन की प्रोसेस निलंबित की जा सकती है मेमोरी के किसी खास ब्लॉक से इंटरैक्ट करता है. इस बारे में ज़्यादा जानने के लिए, पढ़ें वॉचपॉइंट जोड़ने का तरीका बताने वाला सेक्शन.

ब्रेकपॉइंट देखना और कॉन्फ़िगर करना

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

सातवीं इमेज. ब्रेकपॉइंट विंडो में ब्रेकपॉइंट और हर एक के लिए व्यवहार सेटिंग शामिल होती हैं.

ब्रेकपॉइंट विंडो की मदद से, हर ब्रेकपॉइंट को चालू या बंद किया जा सकता है पैनल में सूची. अगर ब्रेकपॉइंट बंद है, तो Android Studio ये काम नहीं करता उस ब्रेकपॉइंट पर पहुंचने पर अपने ऐप्लिकेशन को रोक दें.

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

सभी ब्रेकपॉइंट को कुछ समय के लिए बंद करने के लिए, ब्रेकपॉइंट म्यूट करें पर क्लिक करें डीबग विंडो. फिर से चालू करने के लिए दोबारा क्लिक करें.

विंडो फ़्रेम डीबग करें

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

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

वैरिएबल की जांच करें

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

ऑब्जेक्ट ट्री में एक्सप्रेशन जोड़ने के लिए (ऐप्लिकेशन को डीबग किए जाने के दौरान):

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
आठवीं इमेज. डीबग विंडो में मौजूद ऑब्जेक्ट ट्री और एक्सप्रेशन का एंट्री बॉक्स.
  1. देखने या दिखाने के लिए एक्सप्रेशन डालें
  2. एक्सप्रेशन को एक बार देखने के लिए, स्मार्टवॉच में जोड़ें पर क्लिक करें या Enter दबाएं.

इसके अलावा, अगर ऑब्जेक्ट ट्री में वह एक्सप्रेशन है जिसे आपको देखना है, तो इसे ट्री के सबसे ऊपर लगाएं, ताकि इसे देखे गए एक्सप्रेशन के तौर पर जोड़ा जा सके.

ब्रेकपॉइंट हिट होने या कोड के आगे बढ़ने पर, देखे गए एक्सप्रेशन अपडेट हो जाएंगे.

जांचे गए एक्सप्रेशन, ऑब्जेक्ट ट्री के सबसे ऊपर तब तक दिखते रहेंगे, जब तक मैन्युअल तौर पर फिर से शुरू करें या अपने कोड के आगे बढ़ें.

ऑब्जेक्ट ट्री से देखा गया एक्सप्रेशन हटाने के लिए, एक्सप्रेशन पर राइट क्लिक करें और फिर स्मार्टवॉच को हटाएं पर क्लिक करें.

वॉचपॉइंट जोड़ें

C/C++ कोड को डीबग करते समय, आपके पास खास तरह के ब्रेकपॉइंट सेट करने का विकल्प होता है. इन्हें वॉचपॉइंट की मदद से, ऐप्लिकेशन की प्रोसेस को निलंबित किया जा सकता है. मेमोरी के किसी खास ब्लॉक से इंटरैक्ट करता है. उदाहरण के लिए, अगर मेमोरी के ब्लॉक पर दो पॉइंटर सेट करें और उसे एक वॉचपॉइंट असाइन करें. ऐसा करने के लिए, या तो पॉइंटर का इस्तेमाल करके, मेमोरी के उस ब्लॉक को ऐक्सेस किया जा सकता है. इससे वॉचपॉइंट ट्रिगर होता है.

Android Studio में, रनटाइम के दौरान वॉचपॉइंट बनाया जा सकता है. इसके लिए, एक विशिष्ट चर होता है, लेकिन LLDB मेमोरी जिसे सिस्टम उस वैरिएबल के लिए असाइन करता है, उस वैरिएबल को नहीं. यह यह स्मार्टवॉच के पैनल में वैरिएबल जोड़ने से अलग होता है. इसकी मदद से, आपको किसी वैरिएबल की वैल्यू दिख रही हो, लेकिन उसे ऐप्लिकेशन प्रोसेस तब होती है, जब सिस्टम मेमोरी में मौजूद वैल्यू को पढ़ता है या उसमें बदलाव करता है.

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

वॉचपॉइंट सेट करने के लिए, आपको ये शर्तें पूरी करनी होंगी:

  • आपका टारगेट किया गया फ़िज़िकल डिवाइस या एम्युलेटर, x86 या x86_64 सीपीयू का इस्तेमाल करता है. अगर आपने आपका डिवाइस ARM सीपीयू का इस्तेमाल करता है, तो आपको अपने डिवाइस की मेमोरी में वैरिएबल का पता या तो 4 बाइट, 32-बिट प्रोसेसर के लिए या 8 बाइट, 64-बिट प्रोसेसर के लिए. अपने नेटिव कोड में वैरिएबल को अलाइन करने के लिए, __attribute__((aligned(num_bytes))) वैरिएबल की वैल्यू में होने वाली गिरावट, जैसा कि नीचे दिखाया गया है:
    // For a 64-bit ARM processor
    int my_counter __attribute__((aligned(8)));
    
  • आपने पहले ही तीन या उससे कम वॉचपॉइंट असाइन किए हैं. सिर्फ़ Android Studio x86 या x86_64 टारगेट डिवाइसों पर, ज़्यादा से ज़्यादा चार वॉचपॉइंट के साथ काम करता है. किसी और तरीके से ऐसा हो सकता है कि डिवाइसों पर कम वॉचपॉइंट काम करें.

ध्यान दें: ऐप्लिकेशन को 32-बिट एआरएम एबीआई की मदद से डीबग करते समय, वॉचपॉइंट जोड़ें या ऐप्लिकेशन पर कर्सर घुमाएं की जांच करने के लिए कोड के अंदर वैरिएबल के ऊपर तो उनकी वैल्यू क्रैश हो सकती है. वैकल्पिक हल के रूप में, 64-बिट ARM का उपयोग करके डीबग करें, x86, या x86_64 बाइनरी. इस समस्या को Android Studio के आने वाले वर्शन में ठीक कर दिया जाएगा.

अगर आपका चैनल ज़रूरी शर्तें पूरी करता है, तो आपके पास वॉचपॉइंट जोड़ने का विकल्प है:

  1. जब आपका ऐप्लिकेशन ब्रेकपॉइंट पर निलंबित हो, तब आपके LLDB सेशन व्यू में वैरिएबल पैनल.
  2. उस वैरिएबल पर राइट-क्लिक करें जो आपकी पसंद की मेमोरी के ब्लॉक में मौजूद है ट्रैक करें और वॉचपॉइंट जोड़ें को चुनें.

    नौवीं इमेज. मेमोरी में किसी वैरिएबल के लिए वॉचपॉइंट जोड़ें.
  3. वॉचपॉइंट को कॉन्फ़िगर करने के लिए एक डायलॉग बॉक्स दिखेगा, जैसा कि नौवीं इमेज में दिखाया गया है.

    नीचे दिए गए विकल्पों की मदद से अपने वॉचपॉइंट को कॉन्फ़िगर करें:

    • चालू है: अगर आपको बताना है, तो इस विकल्प से चुने हुए का निशान हटाएं Android Studio है, ताकि जब तक सेटिंग न बदली जाए, तब तक वॉचपॉइंट को अनदेखा कर दें. Android पर Studio आपके वॉचपॉइंट को सेव रखता है, ताकि आप इसे बाद में ऐक्सेस कर सकें.
    • निलंबित करना: डिफ़ॉल्ट रूप से, Android सिस्टम आपके ऐप्लिकेशन को निलंबित कर देता है प्रोसेस तब करता है, जब यह मेमोरी के उस ब्लॉक को ऐक्सेस करता है जिसे आपने किसी वॉचपॉइंट को असाइन किया है. अगर आपको ऐसा कोई विकल्प नहीं चाहिए, तो इस विकल्प से चुने हुए का निशान हटाएं. यह व्यवहार को कस्टमाइज़ करने के लिए ऐसे अतिरिक्त विकल्प दिखाता है, जिनका इस्तेमाल सिस्टम आपके वॉचपॉइंट से इंटरैक्ट करता है: मैसेज को कंसोल में लॉग करें और हिट होने पर हटाएं.
    • ऐक्सेस टाइप: चुनें कि आपके ऐप्लिकेशन को वॉचपॉइंट जब यह वैरिएबल के लिए सिस्टम की ओर से असाइन की गई मेमोरी. अपने वॉचपॉइंट को ट्रिगर करने के लिए पढ़ने या लिखने पर, कोई भी चुनें.
  4. हो गया पर क्लिक करें.

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

10वीं इमेज. ब्रेकपॉइंट डायलॉग में, आपका मौजूदा वॉचपॉइंट और हर एक के लिए व्यवहार की सेटिंग शामिल होती हैं.

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

11वीं इमेज. Android Studio से पता चलता है कि आपका ऐप्लिकेशन, वॉचपॉइंट को ट्रिगर करने से ठीक पहले काम करता है.

संसाधन वैल्यू के डिसप्ले फ़ॉर्मैट को देखना और बदलना

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

  1. वैरिएबल सूची में, दिखाने के लिए रिसॉर्स लाइन पर कहीं भी राइट-क्लिक करें सूची.
  2. सूची में, इस रूप में देखें को चुनें. इसके बाद, वह फ़ॉर्मैट चुनें जिसका आपको इस्तेमाल करना है.

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

    • क्लास: क्लास की परिभाषा दिखाएं.
    • toString: डिसप्ले स्ट्रिंग का फ़ॉर्मैट.
    • ऑब्जेक्ट: ऑब्जेक्ट (क्लास का इंस्टेंस) की परिभाषा दिखाएं.
    • अरे: अरे फ़ॉर्मैट में दिखाएं.
    • टाइमस्टैंप: तारीख और समय को इस तरह से दिखाएं: yyyy-mm-dd hh:mm:ss.
    • Android Auto की सुविधा वाले वाहन: Android Studio, डेटा टाइप के आधार पर सबसे अच्छा फ़ॉर्मैट चुनता है.
    • बाइनरी: शून्य और एक का इस्तेमाल करके बाइनरी वैल्यू दिखाएं.
    • measureSpecification: पैरंट से चुने गए चाइल्ड को पास की गई वैल्यू. MeasureSpec देखें.
    • हेक्स: हेक्साडेसिमल वैल्यू के तौर पर दिखाएं.
    • मूल: किसी प्रारंभिक डेटा प्रकार का इस्तेमाल करके एक संख्यात्मक मान के रूप में दिखाएं.
    • पूरी संख्या: इसे संख्या के टाइप की वैल्यू के तौर पर दिखाएं Integer.

पसंद के मुताबिक फ़ॉर्मैट बनाने के लिए, यह तरीका अपनाएं:

  1. संसाधन मान पर राइट क्लिक करें.
  2. इस रूप में देखें चुनें.
  3. बनाएं को चुनें.
  4. Java डेटा टाइप रेंडरर डायलॉग दिखता है. यहां दिए गए निर्देशों का पालन करें: Java डेटा टाइप रेंडरर.