Selamat siang, hari ini saya membawa perhatian Anda pada bagian kedua artikel tentang debugging aplikasi di LLDB.
Pada bagian pertama, kami menemukan cara menggunakan breakpoints di Xcode untuk memodifikasi properti variabel yang ada dan menambahkan baris kode melalui perintah instruksi.
Saya membuat proyek demo dengan sengaja dengan beberapa kesalahan untuk mengetahui cara menggunakan berbagai jenis breakpoint di LLDB untuk men-debug aplikasi.
Jika Anda belum mempelajari bagian pertama artikel, lebih baik memulainya. Biarkan saya mengingatkan Anda tentang aturan penting dari tutorial ini: Sampai akhir artikel ini, Anda tidak menghentikan kompiler dan tidak me-restart aplikasi setelah peluncuran pertama. Anda memperbaiki kesalahan selama eksekusi program.
Titik pantauJadi, kesalahan berikut dalam aplikasi:
3. Anda dapat memuat posting lebih dari 7 kali.Cara mereproduksi kesalahan:
- Nyalakan Internet di iPhone / simulator Anda
- Gulir ke bawah ke ujung tabel untuk memuat lebih banyak posting.
- Anda dapat memuat posting lebih dari 7 kali (walaupun dalam aplikasi ini pengguna seharusnya tidak memiliki kesempatan seperti itu).
Sebagai salah satu opsi untuk mendeteksi kesalahan, Anda perlu mengetahui bagaimana halaman variabel bilangan bulat diperbarui setelah posting baru dimuat pada halaman. Karena Anda masih belum terbiasa dengan kode saya, Anda perlu meluangkan waktu untuk memahami apa yang terjadi di dalamnya.
Jangan khawatir. Terapkan sihir.
Dari bagian pertama artikel kami mengetahui bahwa permintaan GET HTTP dijalankan di bagian
pragma mark Networking . Ini persis mengandung satu fungsi
loadPosts . Tempatkan breakpoint pada baris pertama fungsi ini dan seret tabel ke bawah untuk memperbarui. Compiler akan berhenti di breakpoint ini.
Objektif-c
CepatDi jendela bawah debugger, klik tombol "Tampilkan Variabel". Sebuah jendela baru akan muncul di sebelah kiri, di mana Anda akan melihat semua variabel PostsTableViewController.

Arahkan kursor ke pageNumber, klik kanan dan pilih “Watch _pageNumber” / “Watch pageNumber” untuk Objective-C dan Swift, masing-masing.
Objektif-c
CepatJadi, Anda membuat apa yang disebut titik pantauan untuk variabel pageNumber. Watchpoint adalah jenis breakpoint yang menghentikan debugger setiap kali nilai variabel disetel ke perubahan.
Objektif-c
CepatLanjutkan program. Debugger berhenti dan Anda melihat sesuatu seperti berikut ini:
Objektif-c
- Merekam nilai lama dan baru dari variabel pageNumber .
- Melacak tumpukan kode yang mengubah nilai variabel jumlah halaman .
- Titik saat ini yang menyebabkan variabel pageNumber berubah adalah metode setter dari variabel ini.
Jika Anda merujuk ke langkah 1 dalam pelacakan tumpukan, ini akan mengarahkan Anda ke potongan kode berikut:
Cepat
- Debugger memberi tahu Anda bahwa titik pengamatan yang Anda atur telah mengungkapkan sesuatu.
- Melacak tumpukan kode yang mengubah nilai variabel jumlah halaman .
- Titik saat ini yang menyebabkan variabel pageNumber berubah adalah fungsi updateForNetworkCallEnd .
Adalah logis untuk menyimpulkan bahwa setiap kali setelah permintaan GET HTTP berhasil, variabel
pageNumber bertambah 1 hingga variabel
status (dari tipe enum) berada dalam keadaan "aktif". Variabel ini dapat memiliki 2 status: aktif ("aktif") atau tidak aktif ("tidak aktif"). Keadaan "aktif" berarti bahwa pengguna dapat memuat posting (yaitu, batas 7 unduhan belum tercapai). Keadaan "tidak aktif", sebaliknya, mengasumsikan bahwa pengguna tidak lagi dapat memuat posting. Sebagai hasilnya, kita perlu menambahkan logika ke fungsi
updateForNetworkCallEnd , yang akan memeriksa variabel
pageNumber dan mengatur variabel
status ke status yang sesuai.
Seperti yang sudah Anda duga, jauh lebih mudah untuk menguji hipotesis terlebih dahulu tanpa menghentikan kompiler sebelum membuat perubahan pada kode.
Saya perhatikan bahwa di bagian
Dukungan tanda pragma kita sudah memiliki fungsi yang kita butuhkan (
setToInactiveState ), yang menetapkan variabel
keadaan menjadi "tidak aktif".
Tambahkan breakpoint satu baris di atas kondisi
if . Juga tambahkan perintah instruksi berikut ke debugger.
Objektif-cexpression if (self.pageNumber >= 7) {[self setToInactiveState]}
Cepat expression if (self.pageNumber >= 7) {setToInactiveState()}

Setelah itu, hapus breakpoint pertama yang Anda gunakan untuk mengatur titik observasi. Juga nonaktifkan watchpoint itu sendiri.
Objektif-c
Objektif-c
Cepat
CepatSekarang gulir ke atas tabel, seret ke bawah untuk menyegarkan dan mulai membalik.
Semuanya berhasil! Tetapi masih terlalu dini untuk merayakannya, kami masih memiliki satu bug untuk diperbaiki!
Apa selanjutnyaBagian terakhir, bagian ketiga dari artikel, di mana kita belajar tentang tipe breakpoints lainnya - simbolik (breakpoints simbolik).