3.1 P: Menggunakan Debugger
Daftar Isi:
- Yang harus sudah Anda KETAHUI
- Yang akan Anda PELAJARI
- Yang akan Anda LAKUKAN
- Ringkasan Aplikasi
- Tugas 1. Membuat Proyek dan Aplikasi SimpleCalc
- Tugas 2. Menjalankan SimpleCalc di Debugger
- Tugas 3: Menjelajahi Fitur Debugger
- Tantangan penyusunan kode
- Rangkuman
- Konsep terkait
Pada praktik sebelumnya Anda menggunakan kelas Log untuk mencetak informasi ke log sistem (logcat) saat aplikasi dijalankan. Menambahkan pernyataan catatan log ke aplikasi adalah salah satu cara untuk menemukan kesalahan dan meningkatkan operasi aplikasi. Cara lainnya adalah dengan menggunakan debugger yang sudah disediakan oleh Android Studio.
Dalam praktik ini Anda akan mempelajari cara men-debug aplikasi dalam emulator dan pada perangkat, menyetel dan melihat breakpoint, menyusuri kode, dan memeriksa variabel.
Yang harus sudah Anda KETAHUI
Dari praktik sebelumnya, Anda harus sudah bisa:
- Membuat proyek Android Studio, bekerja dengan tampilan EditText dan Tombol.
- Membuat dan menjalankan aplikasi di Android Studio, pada emulator dan perangkat.
- Membaca dan menganalisis pelacakan tumpukan, termasuk yang pertama menyala dan pertama mati.
- Menambahkan pernyataan log dan melihat log sistem (logcat) dalam Android Monitor.
Yang akan Anda PELAJARI
Anda akan belajar:
- Menjalankan aplikasi dalam mode debug di emulator atau perangkat.
- Menyusuri eksekusi aplikasi.
- Menyetel dan mengatur breakpoint.
- Memeriksa dan memodifikasi variabel dalam debugger.
Yang akan Anda LAKUKAN
Dalam praktik ini Anda akan:
- Membangun aplikasi SimpleCalc.
- Menyetel dan melihat breakpoints dalam kode untuk SimpleCalc.
- Menyusuri kode saat aplikasi berjalan.
- Memeriksa variabel dan mengevaluasi ekspresi.
- Mengidentifikasi dan memperbaiki masalah dalam aplikasi contoh.
Ringkasan Aplikasi
Aplikasi SimpleCalc memiliki dua teks edit dan empat tombol. Saat Anda memasukkan dua angka dan mengeklik tombol, aplikasi melakukan penghitungan untuk tombol tersebut dan menampilkan hasilnya.
Tugas 1. Membuat Proyek dan Aplikasi SimpleCalc
Untuk praktik ini Anda tidak akan membangun aplikasi SimpleCalc sendiri. Proyek selengkapnya tersedia di SimpleCalc. Dalam tugas ini Anda akan membuka proyek SimpleCalc ke dalam Android Studio dan menjelajahi beberapa fitur utama aplikasinya.
1.1 Unduh dan buka proyek SimpleCalc
- Unduh dan ekstrak folder proyek SimpleCalc project folder.
- Mulai Android Studio dan pilih File > Open.
Buka folder untuk menemukan SimpleCalc, pilih file folder, dan klik OK.
Pembangunan Proyek SimpleCalc. Buka tampilan proyek jika belum terbuka.
Peringatan: Aplikasi ini berisi kesalahan yang akan Anda temukan dan perbaiki. Jika menjalankan aplikasi pada perangkat atau emulator Anda mungkin menemukan perilaku tidak terduga yang mungkin termasuk crash dalam aplikasi.
1.2 Menjelajahi Layout
- Buka
res/layout/activity_main.xml
. - Pratinjau layout dalam Layout Editor.
- Periksa kode layout, desain, dan catat hal-hal berikut ini:
- Layout berisi dua EditTexts untuk input, empat tampilan Tombol untuk penghitungan, dan satu TextViews untuk menampilkan hasilnya.
- Setiap tombol penghitungan memiliki handler onClick-nya sendiri (onAdd, OnSub, dan sebagainya.)
- TextView untuk hasil tidak memiliki teks di dalamnya secara default.
- Tampilan EditText memiliki properti android:inputType dan nilai
"numberDecimal"
. Properti ini menunjukkan bahwa EditText hanya menerima angka sebagai input. Keyboard yang muncul pada layar juga hanya akan berisi angka. Anda akan mengetahui selengkapnya tentang tipe input untuk EditText dalam praktik berikutnya.
1.3 Jelajahi kode aplikasi
- Perluas folder aplikasi/java folder dalam tampilan proyek Android. Selain kelas MainActivity, proyek ini juga menyertakan kelas Kalkulator utilitas.
- Buka Kalkulator (java/com.example.android.simplecalc/Calculator.java). Periksa kodenya. Setelah pemeriksaan, Anda bisa melakukan observasi berikut:
- Operasi yang dapat dilakukan ditentukan oleh enum Operator.
- Semua metode operasi bersifat publik.
- Buka MainActivity (java/com.example.android.simplecalc/MainActivity). Periksa kodenya. Observasi apa yang bisa Anda lakukan tentang kode dan aktivitas? Pikirkan jawabannya dan konfirmasi hal-hal berikut:
- Semua handler onClick memanggil metode compute() privat, dengan nama operasi sebagai salah satu nilai dari enumerasi Calculator.Operator.
- Metode compute() memanggil metode privat getOperand() (yang bergantian memanggil getOperandText()) untuk mengambil nilai angka dari EditTexts.
- Metode compute() menggunakan switch pada nama operand untuk memanggil metode yang tepat dalam kelas Calculator.
- Metode penghitungan dalam kinerja kelas Calculator melakukan aritmetika yang sebenarnya dan mengembalikan nilai.
- Bagian terakhir metode compute() memperbarui TextView dengan hasil penghitungan,
- Jalankan aplikasi. Coba hal-hal berikut ini:
- Masukkan integer dan nilai titik-mengambang untuk penghitungan.
- Masukkan nilai titik-mengambang dengan pecahan desimal besar (misalnya, 1.6753456)
- Bagi angka dengan nol.
- Biarkan salah satu atau kedua tampilan EditText kosong, dan coba penghitungan apa pun.
Periksa pelacakan tumpukan dalam Android Studio saat aplikasi melaporkan kesalahan.
Jika pelacakan tumpukan tidak terlihat, klik tombol Android Monitor pada tombol Android Studio, lalu klik logcat.
Jika satu atau kedua tampilan EditText dalam SimpleCalc kosong, aplikasi melaporkan "Kesalahan" dan log sistem menampilkan status tumpukan eksekusi saat aplikasi menghasilkan kesalahan. Pelacakan tumpukan biasanya menyediakan informasi penting tentang mengapa kesalahan terjadi.
Tantangan penyusunan kode
Tantangan:Periksa pelacakan tumpukan dan coba cari tahu apa yang menyebabkan kesalahan (tapi jangan perbaiki dulu.)
Tugas 2. Menjalankan SimpleCalc di Debugger
Dalam tugas ini Anda akan mendapatkan pengenalan ke debugger dalam Android Studio dan belajar cara menjalankan aplikasi dalam mode debug.
2.1 Memulai dan Menjalankan aplikasi dalam mode debug
Dalam Android Studio, pilih Run > Debug app atau klik ikon Debug di toolbar.
Jika aplikasi sudah berjalan, Anda akan ditanyakan apakah ingin memulai ulang aplikasi dalam mode debug. Klik Restart app.
Android Studio membangun dan menjalankan aplikasi pada emulator atau perangkat. Men-debug sama saja pada kedua kasus. Saat Android Studio memulai debugger, Anda mungkin melihat pesan yang berbunyi "Waiting for debugger" pada perangkat sebelum Anda bisa menggunakan aplikasi.
Jika tampilan Debug tidak secara otomatis muncul dalam Android Studio, klik tab Debug di bagian bawah layar, lalu tab Debugger.
- Buka file MainActivity.java dan klik baris keempat metode compute() (baris setelah pernyataan try).
Klik di gutter kiri jendela editor baris tersebut, sebelah nomor baris. Titik merah muncul di baris itu, menunjukkan breakpoint.
Anda juga bisa menggunakan Run > Toggle Line Breakpoint atau Control-F8 (Command-F8 di OS X) untuk menyetel atau menghapus breakpoint pada baris.
Dalam aplikasi SimpleCalc, masukkan nomor pada tampilan EditText dan klik salah satu tombol hitung.
Eksekusi aplikasi berhenti saat mencapai breakpoint yang Anda setel, dan debugger menampilkan status saat ini aplikasi Anda pada breakpoint tersebut.
- Periksa jendela Debug. Termasuk bagian ini:
- Panel Frames: menunjukkan frame tumpukan eksekusi saat ini untuk thread yang diberikan. Tumpukan eksekusi menunjukkan setiap kelas dan metode yang telah dipanggil dalam aplikasi dan dalam waktu proses Android, dengan metode terbaru di bagian atas. Thread muncul pada menu tarik turun. Aplikasi saat ini berjalan dalam thread utama, dan aplikasi menjalankan metode compute() dalam MainActivity.
- Panel Variables: menampilkan variabel dalam lingkup saat ini dan nilainya. Pada tahap eksekusi aplikasi ini, variabel yang tersedia adalah:
this
(untuk aktivitas),operator
(nama operator dari Calculator.Operator, tempat metode dipanggil), dan variabel global untuk EditText dan TextView. Setiap variabel dalam panel ini memiliki segitiga pengungkapan yang memungkinkan Anda melihat properti objek yang berada dalam variabel tersebut. Coba luaskan variabel untuk menjelajahi propertinya. - Panel Watches: menampilkan nilai-nilai untuk variabel watches yang sudah Anda setel. Watches mengizinkan Anda mengawasi variabel spesifik dalam program dan melihat variabel tersebut berubah saat program dijalankan.
Lanjutkan eksekusi aplikasi dengan Run > Resume Program atau klik Resume ikon di sisi kiri tampilan jendela debugger.
Aplikasi SimpleCalc terus berjalan, dan Anda bisa berinteraksi dengan aplikasi sampai eksekusi kode lain waktu mencapai breakpoint.
2.2 Men-debug aplikasi yang berjalan
Jika aplikasi sudah berjalan pada perangkat atau emulator, dan Anda memutuskan untuk men-debug perangkat itu, Anda dapat memindahkan aplikasi yang sudah berjalan ke mode debug.
- Jalankan aplikasi SimpleCalc secara normal, dengan ikon Run ikon.
- Pilih Run > Attach debugger to Android process atau klik Attach di bilah alat.
Pilih proses aplikasi dari dialog yang muncul. Klik OK.
Jendela Debug muncul, dan Anda sekarang bisa men-debug aplikasi jika sudah memulainya dalam mode debug.
Catatan:Jika jendela Debug tidak secara otomatis muncul, klik tab Debug di bagian bawah layar, lalu tab Debugger.
Tugas 3: Menjelajahi Fitur Debugger
Dalam tugas ini kita akan menjelajahi beragam fitur dalam debugger Android Studio, termasuk menjalankan aplikasi baris per baris, bekerja dengan breakpoint, dan memeriksa variabel.
3.1 Menyusuri eksekusi aplikasi
Setelah breakpoint, Anda bisa menggunakan debugger untuk mengeksekusi setiap baris kode dalam aplikasi satu per satu, dan memeriksa status variabel saat aplikasi berjalan.
- Debug aplikasi dalam Android Studio, dengan breakpoint yang sudah disetel pada tugas terakhir.
Dalam aplikasi, masukkan angka dalam tampilan EditText dan klik tombol Add.
Eksekusi aplikasi Anda berhenti pada breakpoint yang sudah disetel sebelumnya, dan debugger menunjukkan status aplikasi saat ini. Baris saat ini disorot dalam kode Anda.
Klik tombol Step Over di bagian atas jendela debugger.
Debugger mengeksekusi baris saat ini dalam metode compute() (tempat breakpoint, penetapan untuk operandOne), dan sorotan pindah ke baris berikutnya dalam kode (penetapan untuk operandTwo). Panel Variables diperbarui untuk merefleksikan status eksekusi baru, dan nilai variabel saat ini juga muncul setelah setiap baris kode sumber yang dicetak miring.
Anda juga bisa menggunakan Run > Step Over, atau F8, untuk melangkahi kode Anda.
Di baris berikutnya (penetapan untuk operandTwo), klik ikon Step Into ikon.
Step Into melompat ke eksekusi panggilan metode dalam baris saat ini (bukan hanya mengeksekusi metode dan tetap berada pada baris yang sama). Dalam hal ini, karena penetapan termasuk panggilan ke getOperand(), debugger menggulir kode MainActivity ke definisi metode tersebut.
Saat melangkah ke dalam metode, panel Frames diperbarui untuk menunjukkan bingkai baru dalam tumpukan panggilan (di sini getOperand()), dan panel Variables menunjukkan variabel yang tersedia dalam lingkup metode baru. Anda bisa mengeklik baris mana saja pada panel Frames untuk melihat titik dalam bingkai tumpukan, tempat metode dipanggil.
Anda juga bisa menggunakan Run > Step Into, atau F7, untuk memulai metode.
- Klik Step Over untuk menjalankan setiap baris dalam getOperand(). Perhatikan bahwa saat metode selesai debugger mengembalikan Anda ke titik awal saat Anda memulai metode, dan semua panel diperbarui dengan informasi baru.
- Gunakan Step Over dua kali untuk memindahkan titik eksekusi ke baris pertama di dalam pernyataan kasus untuk ADD.
Klik Step Into .
Debugger mengeksekusi metode yang sesuai dan didefinisikan dalam kelas Kalkulator, buka Calculator.java file, dan gulir ke titik eksekusi dalam kelas tersebut. Lagi, beragam pembaruan panel untuk merefleksikan status baru.
Gunakan ikon Step Out untuk mengeksekusi sisa metode penghitungan itu dan mengembalikan ke metode compute() dalam MainActivity. Lalu Anda bisa meneruskan men-debug metode compute() yang tadi ditinggalkan.
Anda juga bisa menggunakan Run > Step Out atau Shift-F8 untuk keluar dari eksekusi metode.
3.2 Bekerja dengan Breakpoint
Gunakan breakpoint untuk menunjukkan di mana dalam kode Anda ingin menyela eksekusi aplikasi untuk men-debug porsi itu dari aplikasi.
- Temukan breakpoint yang disetel pada tugas terakhir saat memulai metode compute() dalam MainActivity.
- Tambahkan breakpoint ke awal pernyataan switch.
- Klik kanan di breakpoint baru itu dan masukkan tes berikut ke dalam bidang Condition:
(operandOne == 42)||(operandTwo == 42)
Klik Done.
Breakpoint kedua ini adalah breakpoint bersyarat. Eksekusi aplikasi hanya akan berhenti pada breakpoint ini jika tes dalam kondisi ini benar. Dalam kasus ini, ekspresi hanya benar jika satu atau operand lain yang Anda masukkan adalah 42. Anda dapat memasukkan ekspresi Java apa pun selama menghasilkan boolean.
- Jalankan aplikasi dalam mode debug (Run > Debug), atau klik Resume jika sudah berjalan. Dalam aplikasi, masukkan dua nomor selain 42 dan klik tombol Add. Eksekusi berhenti pada breakpoint pertama dalam metode compute().
- Klik Resume untuk melanjutkan men-debug aplikasi. Amati bahwa eksekusi tidak berhenti pada breakpoint kedua, karena kondisi tidak terpenuhi.
Klik kanan breakpoint pertama dan hapus centang Enabled. Klik Done. Amati bahwa ikon breakpoint sekarang memiliki titik hijau dengan garis merah.
Menonaktifkan breakpoint memungkinkan Anda untuk "membisukan" breakpoint sementara waktu tanpa menghapusnya dari kode. Jika Anda menghapus breakpoint sekaligus Anda juga akan kehilangan kondisi yang Anda buat, jadi menonaktifkannya adalah pilihan yang lebih baik.
Anda juga bisa membisukan semua breakpoint sekaligus dalam aplikasi dengan ikon Mute Breakpoints .
- Dalam aplikasi, masukkan 42 dalam EditText dan klik tombol apa saja. Amati bahwa breakpoint bersyarat pada pernyataan switch menghentikan eksekusi (kondisi terpenuhi.)
Klik View ikon Breakpoints di tepi kiri jendela debugger. Jendela Breakpoints muncul.
Jendela Breakpoints memungkinkan Anda untuk melihat semua breakpoint dalam aplikasi, mengaktifkan atau menonaktifkan breakpoint individual dan menambahkan fitur breakpoint tambahan termasuk kondisi, dependensi pada breakpoints lain, dan mencatat log.
- Klik Done untuk menutup jendela breakpoint.
3.3 Memeriksa dan memodifikasi variabel
Debugger Android Studio mengizinkan Anda memeriksa status variabel dalam aplikasi saat aplikasi itu berjalan.
- Jalankan aplikasi SimpleCalc dalam mode debug jika belum dijalankan.
Dalam aplikasi, masukkan dua nomor, salah satunya 42, dan klik tombol Add.
Breakpoint pertama dalam compute() masih dibisukan. Eksekusi berhenti pada breakpoint kedua (pada pernyataan switch), dan debugger muncul.
- perhatikan dalam panel Variables bagaimana variabel operandOne dan operandTwo memiliki nilai yang Anda masukkan ke dalam aplikasi.
- Amati bahwa variabel ini adalah objek MainActivity. Klik panah pengungkapan untuk melihat variabel anggota objek itu.
- Klik kanan variabel operandOne dalam panel Variables, dan pilih Set Value. Anda juga bisa menggunakan F2.
- Ubah nilai operandOne ke 10 dan tekan Return.
- Modifikasi nilai operandTwo ke 10 dengan cara yang sama dan tekan Return.
- Klik ikon Resume untuk terus menjalankan aplikasi Anda. Amati bahwa hasil di aplikasi sekarang 20, berdasarkan nilai variabel yang Anda ubah dalam debugger.
- Dalam aplikasi, klik tombol Add. Eksekusi menghentikan breakpoint.
Klik ikon Evaluate Expression , atau pilih Run > Evaluate Expression. Jendela Evaluate Code Fragment muncul. Anda juga bisa mengeklik kanan pada variabel apa pun dan memilih Evaluate Expression.
Gunakan Evaluate Expression untuk menjelajahi status variabel dan objek dalam aplikasi Anda, termasuk metode memanggil pada objek tersebut. Anda bisa memasukkan kode apa pun ke dalam jendela ini.
- Ketikkan mOperandOneEditText.getHint() ke dalam jendela Expression dan klik Evaluate.
Jendela Evaluate Expression diperbarui dengan hasil ekspresi itu. Petunjuk untuk EditText ini adalah string "Type Operand 1", seperti yang awalnya ditetapkan dalam XML untuk EditText yang dimaksud.
Hasil yang Anda dapat dari mengevaluasi ekspresi didasarkan pada status aplikasi saat ini. Tergantung nilai variabel dalam aplikasi saat Anda mengevaluasi ekspresi, Anda mungkin akan mendapatkan hasil yang berbeda.
Perhatikan bahwa jika Anda menggunakan Evaluate Expression untuk mengubah nilai variabel atau properti objek, Anda akan mengubah status berjalan aplikasi.
- Klik Close untuk menyembunyikan jendela Evaluate Expression.
Tantangan penyusunan kode
Tantangan: Dalam Tugas 1.3, Anda mencoba menjalankan aplikasi SimpleCalc tanpa nilai dalam tampilan EditText, yang menyebabkan pesan kesalahan. Gunakan debugger untuk menyusuri eksekusi kode dan menentukan mengapa tepatnya kesalahan ini terjadi. Perbaiki bug yang menyebabkan kesalahan ini.
Rangkuman
- Lihat informasi pencatatan log dalam Android Studio dengan tab logcat di panel Android Monitor.
- Jalankan aplikasi dalam mode debug dengan mengeklik ikon debug atau memilih Run > Debug app.
- Breakpoint adalah tempat dalam kode di mana Anda akan menjeda eksekusi normal aplikasi untuk melakukan tindakan yang lain. Setel atau hapus breakpoint debug dengan mengeklik di gutter kiri jendela editor tepat di samping baris target.
- Jendela Debug dalam Android Studio menunjukkan (stack) Frames, Variabel dalam bingkai tersebut dan Watches (pelacakan aktif variabel saat program berjalan).
Konsep terkait
Dokumentasi konsep terkait ada di Dasar-Dasar Developer Android: Konsep.
Ketahui selengkapnya
- Men-debug Aplikasi Anda (Panduan Pengguna Android Studio)
- Men-debug dan Menguji di Android Studio (video)