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

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. ठीक है पर क्लिक करें.

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

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

डीबग विंडो

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

डीबग विंडो को

  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 सेट करें डिबग लॉग मैसेज को कंडिशनल स्टेटमेंट में फ़्लैग करें और रखें.

सिस्टम लॉग देखना

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

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

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

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

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

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

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

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

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

  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. LLDB से डीबग करते समय, LLDB को कमांड-लाइन विकल्प पास करने के लिए, LLDB सेशन व्यू में LLDB टर्मिनल का इस्तेमाल किया जा सकता है. अगर आपने पक्का किया है कि वे कमांड जिन्हें आपको हर बार डीबगिंग शुरू करते समय एलएलडीबी को एक्ज़ीक्यूट करना है आपका ऐप्लिकेशन, डीबगर के आपके डाउनलोड करके, आप उन कमांड को अपने डीबग कॉन्फ़िगरेशन में जोड़ें.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • आपका टारगेट किया गया फ़िज़िकल डिवाइस या एम्युलेटर, x86 या x86_64 सीपीयू का इस्तेमाल करता है. अगर आपके डिवाइस में ARM सीपीयू का इस्तेमाल किया जाता है, तो आपको मेमोरी में वैरिएबल के पते की सीमा को अलाइन करना होगा. यह सीमा, 32-बिट प्रोसेसर के लिए 4 बाइट या 64-बिट प्रोसेसर के लिए 8 बाइट होनी चाहिए. अपने नेटिव कोड में वैरिएबल को अलाइन करने के लिए, __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 डेटा टाइप रेंडरर.