Men-debug aplikasi

Android Studio menyediakan debugger yang memungkinkan Anda melakukan hal-hal berikut ini dan banyak lagi:

  • Memilih perangkat untuk men-debug aplikasi Anda.
  • Menetapkan titik henti sementara dalam kode Java, Kotlin, dan C/C++.
  • Memeriksa variabel dan mengevaluasi ekspresi pada saat runtime.

Halaman ini berisi petunjuk untuk operasi debugger dasar. Untuk dokumentasi lainnya, lihat juga dokumen proses debug IntelliJ IDEA.

Mengaktifkan proses debug

Sebelum Anda dapat memulai proses debug, lakukan hal berikut:

Aktifkan proses debug di perangkat Anda.
Jika Anda menggunakan emulator, proses debug diaktifkan secara default. Namun, untuk perangkat terhubung, Anda perlu mengaktifkan proses debug dalam opsi developer perangkat.
Jalankan varian build yang dapat di-debug.

Gunakan varian build yang menyertakan debuggable true (isDebuggable = true dalam skrip Kotlin) dalam konfigurasi build.

Biasanya, Anda dapat memilih varian "debug" default yang disertakan dalam setiap project Android Studio , meskipun tidak terlihat dalam file build.gradle. Namun, jika Anda menentukan jenis build baru yang seharusnya dapat di-debug, Anda harus menambahkan debuggable true ke jenis build tersebut:

Groovy

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

Kotlin

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

Properti ini juga berlaku untuk modul dengan kode C/C++.

Catatan: Properti jniDebuggable tidak digunakan lagi.

Jika aplikasi Anda menggunakan modul library yang juga ingin Anda debug sebagai dependensi, library tersebut juga harus dipaketkan dengan debuggable true agar mempertahankan simbol debugnya. Untuk memastikan bahwa varian project aplikasi yang dapat di-debug menerima varian modul library yang dapat di-debug, publikasikan library versi non-default milik Anda.

Memulai proses debug

Anda dapat memulai sesi proses debug dengan langkah berikut:

  1. Tetapkan titik henti sementara dalam kode aplikasi Anda.
  2. Pada toolbar, pilih perangkat untuk men-debug aplikasi Anda dari menu perangkat target.
    Menu perangkat target.
    Gambar 1. Menu perangkat target.

    Jika tidak memiliki perangkat yang dikonfigurasi, Anda harus menghubungkan perangkat melalui USB, menghubungkan perangkat melalui Wi-Fi, atau membuat AVD untuk menggunakan Android Emulator.

  3. Di toolbar, klik Debug .

    Jika aplikasi Anda sudah berjalan di perangkat, dialog akan muncul yang menanyakan apakah Anda ingin beralih dari Run ke Debug. Perangkat perlu dimulai ulang untuk memulai proses debug. Agar instance aplikasi yang sama tetap berjalan, klik Cancel Debug, lalu pasang debugger ke aplikasi yang sedang berjalan. Jika tidak, Android Studio akan mem-build APK, menandatanganinya dengan kunci debug, menginstalnya di perangkat yang Anda pilih, dan menjalankannya.

    Jika Anda menambahkan kode C dan C++ ke project, Android Studio juga akan menjalankan debugger LLDB di jendela Debug untuk men-debug kode native Anda.

  4. Jika jendela Debug tidak terbuka, pilih View > Tool Windows > Debug, atau klik Debug di kolom jendela alat.

Memasang debugger ke aplikasi yang sedang berjalan

Jika aplikasi Anda sudah berjalan di perangkat, Anda dapat memulai proses debug tanpa memulai ulang aplikasi dengan cara berikut:

  1. Klik Attach debugger to Android process .
  2. Pada dialog Choose Process, pilih proses yang Anda inginkan untuk dipasangi debugger.
    1. Jika Anda menggunakan emulator atau perangkat yang telah di-root, Anda dapat mencentang Show all processes untuk melihat semua proses. Pada perangkat yang telah di-root, tindakan ini akan menampilkan semua proses yang berjalan di perangkat tersebut. Namun, pada perangkat yang tidak di-root, tindakan ini hanya akan menampilkan proses yang dapat di-debug.
    2. Dari menu Use Android Debugger Settings from, Anda dapat memilih konfigurasi run/debug yang ada. Untuk kode C dan C++, hal ini memungkinkan Anda menggunakan kembali perintah startup LLDB, perintah post-attach LLDB, dan direktori simbol dalam konfigurasi yang ada.
    3. Jika Anda tidak memiliki konfigurasi run/debug yang ada, pilih Create New. Pilihan ini mengaktifkan menu Debug Type, tempat Anda dapat memilih jenis debug lainnya. Secara default, Android Studio menggunakan jenis debug Deteksi Otomatis guna memilih opsi debugger terbaik untuk Anda berdasarkan apakah project Anda menyertakan kode Java atau C/C++.
  3. Klik OK.

    Jendela Debug akan muncul.

Tab Processes di Device Explorer (View > Tool Windows > Device Explorer) juga memiliki daftar proses yang dapat di-debug. Dari sana, Anda dapat memilih proses dan menghentikan , memaksa berhenti , atau memasang debugger ke proses tertentu .

Jendela debug

Gambar 2.Jendela Debug.

Jendela debug dibagi menjadi

  1. Toolbar eksekusi dan navigasi. Lihat Menggunakan titik henti sementara
  2. Pemilih thread
  3. Evaluasi dan entri ekspresi yang dipantau. Lihat Memeriksa variabel.
  4. Tampilan stack
  5. Panel variabel. Lihat Memeriksa variabel.

Catatan: Debugger dan pembersih sampah memori Android Studio terintegrasi dengan bebas. Mesin virtual Android menjamin bahwa setiap objek yang diketahui debugger tidak akan dibersihkan sampah memorinya hingga setelah koneksi debugger terputus. Hal ini dapat mengakibatkan penumpukan objek saat debugger terhubung. Misalnya, jika debugger melihat thread yang berjalan, objek Thread yang terkait tidak akan dibersihkan sampah memorinya hingga koneksi debugger terputus, meskipun thread telah dihentikan.

Mengubah jenis debugger

Perlu beberapa alat debugger untuk men-debug kode Java/Kotlin dan kode C/C++. Oleh karena itu, debugger Android Studio memungkinkan Anda memilih jenis debugger yang akan digunakan. Secara default, Android Studio menentukan debugger yang akan digunakan berdasarkan bahasa yang dideteksinya dalam project menggunakan jenis debugger Deteksi Otomatis.

Untuk memilih debugger secara manual di konfigurasi debug, klik Run > Edit Configurations. Anda juga dapat memilih debugger dalam dialog yang muncul saat mengklik Run > Attach debugger to Android process.

Jenis debug yang tersedia meliputi:

Deteksi Otomatis
Pilih jenis debug ini jika Anda ingin Android Studio otomatis memilih opsi terbaik untuk kode yang sedang di-debug. Misalnya, jika Anda memiliki kode C atau C++ dalam project, Android Studio akan menggunakan jenis debug Dual secara otomatis. Jika tidak, Android Studio akan menggunakan jenis debug Khusus Java.
Khusus Java
Pilih jenis debug ini jika Anda hanya ingin men-debug kode yang ditulis di Java atau Kotlin. Debugger Khusus Java akan mengabaikan setiap titik henti sementara atau pantauan yang ditetapkan dalam kode native Anda.
Khusus Native (hanya tersedia dengan kode C/C++)
Pilih jenis debug ini jika Anda hanya ingin menggunakan LLDB untuk men-debug kode Anda. Saat menggunakan tipe debug ini, tampilan sesi debugger Java tidak akan tersedia. Secara default, LLDB hanya akan memeriksa kode native Anda dan mengabaikan titik henti sementara dalam kode Java. Jika Anda juga ingin men-debug kode Java, beralihlah ke jenis debug Deteksi Otomatis atau Dual.

Proses debug native hanya berfungsi pada perangkat yang memenuhi persyaratan berikut:

  • Perangkat mendukung run-as.

    Untuk memeriksa apakah perangkat mendukung run-as, jalankan perintah berikut pada shell ADB yang terhubung ke perangkat Anda:

    run-as your-package-name pwd
    

    Ganti your-package-name dengan nama paket aplikasi Anda. Jika perangkat mendukung run-as, perintah akan ditampilkan tanpa mengalami error apa pun.

  • Perangkat telah mengaktifkan ptrace.

    Untuk memeriksa apakah ptrace diaktifkan, jalankan perintah berikut pada shell ADB yang terhubung ke perangkat Anda:

    sysctl kernel.yama.ptrace_scope
    

    Jika ptrace diaktifkan, perintah akan mencetak nilai 0 atau error unknown key. Jika ptrace tidak diaktifkan, nilai selain 0 akan dicetak.

Dual (Java + Native) – hanya tersedia dengan kode C/C++
Pilih jenis debug ini jika Anda ingin berganti antara men-debug kode Java dan native. Android Studio memasangkan debugger Java dan LLDB ke proses aplikasi Anda, sehingga Anda dapat memeriksa titik henti sementara dalam kode Java maupun kode native tanpa harus memulai ulang aplikasi Anda atau mengubah konfigurasi debug.

Dalam gambar 2, perhatikan dua tab di sebelah kanan judul jendela Debug. Karena aplikasi memiliki kode Java dan C++, satu tab digunakan untuk men-debug kode native, dan satu tab lainnya untuk men-debug kode Java, sebagaimana ditunjukkan oleh -java.

Gambar 3. Tab untuk men-debug kode native dan tab untuk men-debug kode Java.

Catatan: Saat men-debug kode native yang dioptimalkan oleh compiler, Anda mungkin mendapatkan pesan peringatan berikut:
This function was compiled with optimizations enabled. Some debugger features may not be available. Saat menggunakan tanda pengoptimalan, compiler akan membuat perubahan pada kode yang dikompilasi untuk membuatnya berjalan lebih efisien. Hal ini dapat menyebabkan debugger melaporkan informasi yang tidak terduga atau informasi yang salah karena sulit bagi debugger untuk memetakan kembali kode yang telah dikompilasi dan dioptimalkan ke kode sumber aslinya. Untuk alasan ini, Anda harus menonaktifkan pengoptimalan kompilator saat men-debug kode native.

Menggunakan log sistem

Log sistem akan menampilkan pesan sistem saat Anda men-debug aplikasi. Pesan ini berisi informasi dari aplikasi yang berjalan di perangkat. Jika Anda ingin menggunakan log sistem untuk men-debug aplikasi, pastikan kode Anda menulis pesan log dan mencetak pelacakan tumpukan untuk pengecualian ketika aplikasi berada dalam tahap pengembangan.

Menulis pesan log dalam kode Anda

Untuk menulis pesan log dalam kode, gunakan class Log. Pesan log membantu Anda memahami alur eksekusi dengan mengumpulkan output debug sistem saat Anda berinteraksi dengan aplikasi. Pesan log juga dapat memberitahukan bagian mana dari aplikasi Anda yang gagal. Untuk mengetahui informasi selengkapnya tentang logging, lihat Menulis dan menampilkan log dengan Logcat.

Contoh berikut menunjukkan bagaimana Anda dapat menambahkan pesan log untuk menentukan apakah informasi status sebelumnya tersedia ketika aktivitas dimulai:

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 */
        }
        ...
    }
}

Selama pengembangan, kode Anda juga dapat menangkap pengecualian dan menulis pelacakan tumpukan ke log sistem:

Kotlin

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

Java

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

Catatan: Hapus pesan log debug dan panggilan cetak pelacakan tumpukan dari kode saat Anda siap memublikasikan aplikasi. Untuk melakukannya, tetapkan tanda DEBUG dan tempatkan pesan log debug di dalam pernyataan bersyarat.

Menampilkan log sistem

Anda dapat melihat dan memfilter pesan debug serta pesan sistem lainnya di jendela Logcat, seperti yang ditunjukkan dalam gambar 4. Misalnya, Anda dapat melihat pesan saat pembersihan sampah memori dilakukan, atau pesan yang Anda tambahkan ke aplikasi dengan class Log.

Untuk menggunakan Logcat, mulai proses debug, lalu pilih tab Logcat.

Gambar 4. Jendela logcat dengan setelan filter.

Untuk deskripsi tentang Logcat dan opsi pemfilterannya, lihat Menulis dan menampilkan log dengan Logcat.

Menggunakan titik henti sementara

Android Studio mendukung titik henti sementara yang memicu tindakan proses debug yang berbeda. Ada beberapa jenis titik henti sementara:

Titik henti sementara baris
Jenis yang paling umum adalah titik henti sementara baris yang menjeda eksekusi aplikasi pada baris kode yang ditetapkan. Saat dijeda, Anda dapat memeriksa variabel, mengevaluasi ekspresi, kemudian melanjutkan eksekusi baris demi baris untuk menentukan penyebab error runtime.
Titik henti sementara metode
Titik henti sementara metode menjeda eksekusi aplikasi saat memasuki atau keluar dari metode tertentu. Saat dijeda, Anda dapat memeriksa variabel, mengevaluasi ekspresi, kemudian melanjutkan eksekusi baris demi baris untuk menentukan penyebab error runtime. Saat Anda menetapkan titik henti sementara pada fungsi composable, debugger akan mencantumkan parameter composable dan statusnya untuk membantu mengidentifikasi perubahan yang mungkin menyebabkan rekomposisi.
Titik henti sementara kolom
Titik henti sementara kolom menjeda eksekusi aplikasi saat aplikasi membaca dari atau menulis ke kolom tertentu.
Titik henti sementara pengecualian
Titik henti sementara pengecualian menjeda eksekusi aplikasi saat pengecualian ditampilkan.

Anda dapat menetapkan titik henti sementara bersyarat yang hanya akan menangguhkan eksekusi jika kondisi tertentu terpenuhi. Anda juga dapat menetapkan titik henti sementara logging yang menulis ke Logcat tanpa menangguhkan eksekusi. Hal ini dapat membantu menghindari memenuhi kode Anda dengan laporan log.

Untuk menambahkan titik henti sementara baris, lakukan langkah berikut:

  1. Temukan baris kode tempat Anda ingin menjeda eksekusi.
  2. Klik bagian tepi kiri di sepanjang baris kode tersebut atau letakkan tanda sisipan pada baris dan tekan Control+F8 (di macOS, Command+F8).
  3. Jika aplikasi Anda sudah berjalan, klik Attach debugger to Android process . Jika tidak, untuk memulai proses debug, klik Debug .

Titik merah akan muncul di sebelah baris saat Anda menetapkan titik henti sementara, seperti yang ditunjukkan dalam gambar 5.

Gambar 5. Titik merah akan muncul di sebelah baris saat Anda menetapkan titik henti sementara.

Saat eksekusi kode mencapai titik henti sementara, Android Studio akan menjeda eksekusi aplikasi Anda.

Untuk mengidentifikasi status aplikasi, gunakan alat di tab Debugger:

  • Untuk menemukan variabel dalam hierarki objek, luaskan hierarki dalam tampilan Variables. Jika tampilan Variables tidak terlihat, klik Layout Settings dan pastikan variables dicentang.

  • Untuk maju ke baris berikutnya dalam kode tanpa memasukkan metode, klik Step Over .

  • Untuk maju ke baris pertama dalam panggilan metode, klik Step Into .

  • Untuk maju ke baris berikutnya di luar metode saat ini, klik Step Out .

  • Untuk terus menjalankan aplikasi secara normal, klik Resume Program .

Jika project Anda menggunakan kode native, secara default jenis debug Deteksi Otomatis akan memasangkan debugger Java dan LLDB ke aplikasi sebagai dua proses yang terpisah. Anda dapat beralih antara memeriksa titik henti sementara C/C++ dan Java tanpa memulai ulang aplikasi atau mengubah setelan.

Catatan: Agar Android Studio mendeteksi titik henti sementara dalam kode C atau C++, Anda harus menggunakan jenis debug yang mendukung LLDB, seperti Deteksi Otomatis, Native, atau Dual. Anda dapat mengubah jenis debug yang digunakan Android Studio dengan mengedit konfigurasi debug Anda. Untuk mempelajari berbagai jenis debug lebih lanjut, baca bagian tentang penggunaan jenis debug lainnya.

Saat Android Studio men-deploy aplikasi Anda ke perangkat target, jendela Debug akan terbuka dengan tab atau tampilan sesi debug untuk setiap proses debugger, seperti ditunjukkan dalam gambar 6.

Gambar 6. Men-debug kode native menggunakan LLDB.
  1. Android Studio beralih ke tab <your-module> saat debugger LLDB menjumpai titik henti sementara di kode C/C++ Anda. Panel Frames, Variables, dan Watches juga tersedia serta berfungsi sama persis seperti ketika Anda men-debug kode Java.

    Meskipun panel Threads tidak tersedia dalam tampilan sesi LLDB, Anda dapat mengakses proses aplikasi menggunakan menu drop-down di panel Frames. Pelajari panel ini lebih lanjut di bagian cara men-debug frame jendela dan memeriksa variabel.

    Catatan: Ketika memeriksa titik henti sementara dalam kode native, sistem Android akan menangguhkan mesin virtual yang menjalankan bytecode Java milik aplikasi Anda. Artinya, Anda tidak dapat berinteraksi dengan debugger Java atau mengambil informasi status apa pun dari sesi debugger Java saat memeriksa titik henti sementara dalam kode native.

  2. Android Studio otomatis beralih ke tab <your-module>-java ketika debugger Java menjumpai titik henti sementara dalam kode Java atau Kotlin.
  3. Ketika menjalankan proses debug dengan LLDB, Anda dapat menggunakan terminal LLDB dalam tampilan sesi LLDB untuk meneruskan opsi command line ke LLDB. Jika memiliki perintah tertentu yang ingin dieksekusi dengan LLDB setiap kali Anda mulai men-debug aplikasi, baik sebelum maupun setelah debugger dipasangkan ke proses aplikasi, Anda dapat menambahkan perintah tersebut ke konfigurasi debug.

Ketika men-debug kode C/C++, Anda juga dapat menetapkan jenis titik henti sementara khusus, disebut watchpoint, yang dapat menangguhkan proses aplikasi ketika aplikasi berinteraksi dengan blok memori tertentu. Untuk mempelajari lebih lanjut, baca bagian tentang cara menambahkan watchpoint.

Menampilkan dan mengonfigurasi titik henti sementara

Untuk menampilkan semua titik henti sementara dan mengonfigurasi setelan titik henti sementara, klik View Breakpoints di jendela Debug. Jendela Breakpoints akan muncul, seperti ditunjukkan dalam gambar 7.

Gambar 7. Jendela Breakpoints mencantumkan semua titik henti sementara saat ini dan menyertakan setelan perilaku untuk setiap titik henti sementara.

Jendela Breakpoints memungkinkan Anda mengaktifkan atau menonaktifkan setiap titik henti sementara dari daftar di panel. Jika titik henti sementara dinonaktifkan, Android Studio tidak akan menjeda aplikasi saat mencapai titik henti sementara tersebut.

Pilih titik henti sementara dari daftar untuk mengonfigurasi setelannya. Anda dapat mengonfigurasi titik henti sementara agar dinonaktifkan terlebih dahulu dan meminta sistem untuk mengaktifkannya setelah titik henti sementara lainnya tercapai. Anda juga dapat mengonfigurasi apakah titik henti sementara harus dinonaktifkan setelah dicapai. Untuk menetapkan titik henti sementara bagi suatu pengecualian, pilih Exception Breakpoints di daftar titik henti sementara.

Untuk menonaktifkan semua titik henti sementara untuk sementara, klik Mute Breakpoints di jendela Debug. Klik lagi untuk mengaktifkan kembali.

Men-debug frame jendela

Di jendela Debugger, panel Frames memungkinkan Anda memeriksa frame stack yang menyebabkan tercapainya titik henti sementara saat ini. Hal ini memungkinkan Anda membuka serta memeriksa frame stack, dan juga memeriksa daftar thread dalam aplikasi Android Anda.

Untuk memilih thread, gunakan menu pemilih thread dan lihat frame stack-nya. Klik elemen dalam frame untuk membuka sumber di editor. Anda juga dapat menyesuaikan penyajian thread dan mengekspor frame stack seperti yang dibahas dalam Panduan Memeriksa Frame.

Memeriksa variabel

Di jendela Debugger, panel Variables memungkinkan Anda memeriksa variabel ketika sistem menghentikan aplikasi pada titik akhir sementara dan Anda memilih frame dari panel Frames. Panel Variables juga memungkinkan Anda mengevaluasi ekspresi ad-hoc menggunakan metode statis dan/atau variabel yang tersedia dalam frame yang dipilih.

Untuk menambahkan ekspresi ke hierarki objek (saat aplikasi sedang di-debug):

Gambar 8. Hierarki objek dan kotak entri ekspresi di jendela Debug.
  1. Masukkan ekspresi yang ingin dipantau atau ditampilkan
  2. Klik Add to watches atau tekan Enter untuk mengevaluasi ekspresi sekali.

Atau, jika hierarki objek berisi ekspresi yang ingin Anda pantau, Anda dapat menariknya ke bagian atas hierarki untuk menambahkannya sebagai ekspresi yang dipantau.

Ekspresi yang dipantau akan diperbarui saat titik henti sementara tercapai atau Anda sedang menelusuri kode.

Ekspresi yang dievaluasi akan tetap ditampilkan di bagian atas hierarki objek hingga Anda mengevaluasi ekspresi lain atau menelusuri kode secara manual.

Untuk menghapus ekspresi yang dipantau dari hierarki objek, klik kanan ekspresi tersebut, lalu klik Remove Watch.

Menambahkan watchpoint

Ketika men-debug kode C/C++, Anda dapat menetapkan jenis titik henti sementara khusus, disebut watchpoint, yang dapat menangguhkan proses aplikasi ketika aplikasi Anda berinteraksi dengan blok memori tertentu. Misalnya, jika Anda menetapkan dua penunjuk ke sebuah blok memori dan menetapkan watchpoint ke blok memori tersebut, menggunakan salah satu penunjuk untuk mengakses blok memori tersebut akan memicu watchpoint yang telah ditetapkan.

Di Android Studio, Anda dapat membuat watchpoint saat runtime dengan memilih variabel tertentu, tetapi LLDB akan menetapkan watchpoint hanya pada blok memori yang dialokasikan oleh sistem ke variabel tersebut, bukan variabel itu sendiri. Hal ini berbeda dengan menambahkan variabel ke panel Watches, yang memungkinkan Anda mengamati nilai variabel tetapi tidak mengizinkan Anda menangguhkan proses aplikasi saat sistem membaca atau mengubah nilainya dalam memori.

Catatan: Saat proses aplikasi Anda keluar dari suatu fungsi dan sistem membatalkan alokasi variabel lokalnya dari memori, Anda harus menetapkan ulang setiap watchpoint yang telah dibuat untuk variabel tersebut.

Untuk menetapkan watchpoint, Anda harus memenuhi persyaratan berikut:

  • Perangkat fisik atau emulator target menggunakan CPU x86 atau x86_64. Jika perangkat Anda menggunakan CPU ARM, Anda harus menyelaraskan batas alamat variabel dalam memori ke 4 byte untuk prosesor 32 bit, atau 8 byte untuk prosesor 64 bit. Untuk menyelaraskan variabel dalam kode native, tentukan __attribute__((aligned(num_bytes))) dalam deselerasi variabel, seperti yang ditunjukkan di bawah:
    // For a 64-bit ARM processor
    int my_counter __attribute__((aligned(8)));
  • Anda telah menetapkan tiga watchpoint atau lebih sedikit. Android Studio hanya mendukung hingga empat watchpoint pada perangkat target x86 atau x86_64. Perangkat lain mungkin mendukung lebih sedikit watchpoint.

Catatan: Saat menjalankan proses debug pada aplikasi menggunakan ABI ARM 32 bit, menambahkan watchpoint atau mengarahkan kursor ke variabel di dalam kode untuk mengetahui nilai variabel tersebut dapat menyebabkan error. Sebagai solusinya, debug menggunakan biner ARM 64 bit, x86, atau x86_64. Masalah ini akan diperbaiki dalam rilis Android Studio mendatang.

Jika memenuhi persyaratan, Anda dapat menambahkan watchpoint seperti berikut:

  1. Sementara aplikasi Anda ditangguhkan pada titik henti sementara, buka panel Variables dalam tampilan sesi LLDB Anda.
  2. Klik kanan variabel yang menempati blok memori yang ingin Anda lacak, lalu pilih Add Watchpoint.

    Gambar 9. Menambahkan watchpoint ke variabel dalam memori.
  3. Dialog untuk mengonfigurasi watchpoint akan muncul, seperti ditunjukkan dalam gambar 9.

    Konfigurasi watchpoint Anda dengan opsi berikut:

    • Enabled: Batalkan pilihan opsi ini jika Anda ingin memberi tahu Android Studio agar mengabaikan watchpoint hingga Anda mengubah setelan. Android Studio menyimpan watchpoint sehingga Anda dapat mengaksesnya nanti.
    • Suspend: Secara default, sistem Android akan menangguhkan proses aplikasi saat aplikasi mengakses blok memori yang ditetapkan pada watchpoint. Batalkan pilihan opsi ini jika Anda tidak menginginkan perilaku ini. Tindakan ini akan menampilkan opsi tambahan yang dapat Anda gunakan untuk menyesuaikan perilaku saat sistem berinteraksi dengan watchpoint: Log message to console dan Remove when hit.
    • Access Type: Pilih apakah aplikasi Anda harus memicu watchpoint saat mencoba Membaca atau Menulis ke blok memori yang dialokasikan oleh sistem pada variabel. Untuk memicu watchpoint pada mode baca atau tulis, pilih Any.
  4. Klik Done.

Untuk menampilkan semua watchpoint dan mengonfigurasi setelan watchpoint, klik View Breakpoints di jendela Debug. Dialog Breakpoints akan muncul, seperti ditunjukkan dalam gambar 10.

Gambar 10. Dialog Breakpoints mencantumkan watchpoint Anda saat ini dan menyertakan setelan perilaku untuk setiap watchpoint.

Setelah menambahkan watchpoint, klik Resume Program di jendela Debug untuk melanjutkan proses aplikasi. Secara default, jika aplikasi Anda mencoba mengakses blok memori yang telah diberi watchpoint, sistem Android akan menangguhkan proses aplikasi dan ikon watchpoint akan muncul di sebelah baris kode yang terakhir dijalankan oleh aplikasi Anda, seperti ditunjukkan dalam gambar 11.

Gambar 11. Android Studio menunjukkan baris kode yang dijalankan aplikasi Anda tepat sebelum memicu watchpoint.

Melihat dan mengubah format tampilan nilai resource

Dalam mode debug, Anda dapat melihat nilai resource dan memilih format tampilan berbeda untuk variabel dalam kode Java atau Kotlin Anda. Setelah tab Variables ditampilkan dan frame dipilih, lakukan langkah-langkah berikut:

  1. Dalam daftar Variables, klik kanan di mana saja pada baris resource untuk menampilkan daftar.
  2. Dalam daftar, pilih View as, lalu pilih format yang ingin digunakan.

    Format yang tersedia bergantung pada jenis data resource yang Anda pilih. Anda mungkin melihat satu atau beberapa opsi berikut:

    • Class: Menampilkan definisi class.
    • toString: Menampilkan format string.
    • Object: Menampilkan definisi objek (instance suatu class).
    • Array: Menampilkan dalam format array.
    • Timestamp: Menampilkan tanggal dan waktu dalam format berikut: yyyy-mm-dd hh:mm:ss.
    • Auto: Android Studio akan memilih format terbaik berdasarkan tipe data.
    • Binary: Menampilkan nilai biner menggunakan angka nol dan satu.
    • MeasureSpec: Nilai yang diteruskan dari induk ke turunan yang dipilih. Lihat MeasureSpec.
    • Hex: Menampilkan sebagai nilai heksadesimal.
    • Primitive: Menampilkan sebagai nilai numerik menggunakan jenis data primitif.
    • Integer: Menampilkan nilai numerik berjenis Integer.

Untuk membuat format kustom, lakukan hal berikut:

  1. Klik kanan nilai resource.
  2. Pilih View as.
  3. Pilih Create.
  4. Dialog Java Data Type Renderers akan muncul. Ikuti petunjuk dalam Java Data Type Renderers.