[? DAN ARMADARAS:?] Hi, Saya m [? Dan Armadaras?].
Hari ini, kita akan akan melihat debugging.
Tidak hanya kita akan berbicara tentang beberapa teknik,
tetapi juga kita akan melihat beberapa fitur yang terdapat
dalam IDE CS50 yang memungkinkan Anda untuk dengan mudah men-debug program.
>> Salah satu contoh sesuatu yang bisa salah
dan itu sebenarnya sesuatu bahwa kita sudah lihat sebelumnya.
Dalam hal ini, program ini adalah program C yang menerima integer dari pengguna,
membaginya dengan dua, dan menyediakan output kembali ke pengguna.
Sekarang dari apa yang telah kita lihat awal kuliah,
kita tahu bahwa ini benar-benar akan menyebabkan tipe tertentu dari masalah divisi
ketika kita memiliki angka ganjil.
>> Secara khusus, kami hanya akan membuang apapun setelah titik desimal.
Sekarang, kita tahu bahwa ini terjadi menjadi kasus.
Dan jika kita menjalankannya, kita dapat mengkonfirmasi kecurigaan kami, pertama, dengan menyusun.
Dan kemudian, dengan menjalankan dan memasuki ganjil.
>> Ini bukan hal yang baru.
Tapi ini sebenarnya merupakan contoh bug yang
bisa ada dalam program yang lebih besar yang menjadi lebih sulit untuk melacak.
Meskipun kita tahu apa masalah adalah, inti sebenarnya dari masalah ini
mungkin mencoba untuk mengidentifikasi khusus di mana kesalahan terjadi,
mengidentifikasi apa masalah itu adalah, dan kemudian memperbaikinya.
Jadi memberikan ini sebagai contoh apa mungkin sesuatu
bahwa kita sudah tahu tapi bisa dikuburkan dalam unsur-unsur lain dari kode.
>> Jadi membuka sumber lain ini Kode file sebagai contoh,
Masalah pembagian ini sekarang bagian dari program yang lebih besar.
Masih mungkin sedikit bit dibikin, dan kami
mungkin bisa dengan mudah mengidentifikasi, terutama
karena kami hanya membahas ini.
Tapi kita tahu bahwa ini Masalah bisa berada pada skala yang lebih besar.
>> Jika saya mengkompilasi ini dan sekarang menjalankannya, masukkan angka ganjil,
kita dapat melihat bahwa kita tidak mendapatkan tepatnya output yang kita mungkin telah diharapkan.
Dalam kasus ini, kita bisa mengatakan bahwa kita
ingin menghitung semua nomor dari satu hingga beberapa nomor tertentu.
Dan kita dapat melihat bahwa kita memiliki berbagai masalah
sini jika kita keluaran, hanya, 0 dan 1 ketika kita memberikan masukan dari 5.
>> Jadi kita sudah tahu bahwa ada masalah di sini.
Tapi kita mungkin tidak tahu persis di mana masalah ini benar-benar ada.
Sekarang salah satu cara yang kita dapat mencoba untuk memperbaiki ini
adalah sesuatu yang kita sudah telah diperkenalkan ke.
Kami hanya dapat menggunakannya pada skala yang lebih besar.
>> On line 14, kita memiliki Fungsi printf ini,
yang memungkinkan kita untuk mencetak negara berbagai potongan informasi.
Dan ini adalah sesuatu yang Anda harus memanfaatkan dalam program Anda
mencoba untuk mencari tahu persis apa yang terjadi di berbagai baris kode.
Jadi bahkan jika ini bukan hasil akhir yang kita benar-benar
ingin menghasilkan dari program ini, kami masih
mungkin memiliki beberapa men-debug pernyataan di mana kita
dapat mencoba untuk mencari tahu persis apa yang terjadi di dalam kode kami.
>> Jadi dalam hal ini, saya akan printf dengan tag debug.
Dalam hal ini, ini hanya debug string
bahwa aku up-menempatkan sehingga menjadi sangat jelas dalam output dari kode saya
apa yang saya ingin menunjukkan.
Dan output di sini nomor bahwa kita telah dihitung.
>> Dalam hal ini, aku mungkin ingin tahu persis
apa yang terjadi sebelum dan setelah beberapa perhitungan tertentu.
Jadi saya bisa menggunakan printf sebelum dan setelah itu baris kode.
Dalam hal ini, saya bahkan bisa membuatnya sedikit lebih jelas
dengan mengatakan men-debug sebelum dan debug setelah begitu
bahwa saya tidak bingung sendiri dengan beberapa baris yang terlihat identik.
>> Sekarang jika kita mengkompilasi ulang ini dan menjalankan itu, masukkan nomor seperti lima lagi,
kita dapat melihat bahwa kita memiliki sekarang keluaran sebelum dan sesudah
dan menemukan bahwa kita tidak melakukan jelas divisi atau yang jelas memiliki nomor tersebut
bahwa kita benar-benar ingin lakukan.
Sekarang dalam kasus ini, ini tidak benar-benar output yang jelas.
Ini tidak benar-benar hasil yang jelas bahwa kami ingin keluar dari program khusus ini.
>> Dan ini, sekali lagi, sedikit dibikin.
Tapi, mungkin, salah satu hal yang kita bisa lakukan jika spesifikasi mengatakan
bahwa kita ingin membagi ini dengan 2 dan menambahkan 1-- jadi dengan kata lain,
kami ingin melengkapi up-- kemudian kita mungkin tahu bahwa kita bisa
melakukannya hal tertentu, dalam hal ini.
Sekarang di sini kita tahu bahwa kita akan mampu menambah 1 ke nomor dibelah dua kami.
>> Mari kita ulang ini dan mengkonfirmasi bahwa ini
berperilaku dengan cara yang kita ingin.
Kita bisa melihat bahwa sekarang sebelum memiliki, kita memiliki nomor 5.
Setelah, kami memiliki nomor 3, yang sesuai dengan spesifikasi kami,
adalah apa yang kita ingin lakukan.
Tetapi jika kita melihat output di sini, kita bisa
melihat bahwa kita mungkin memiliki lain bug sama sekali, yang merupakan
bahwa kita mulai menghitung kami dari 0.
>> Sekarang lagi, ini adalah sesuatu bahwa kita telah melihat di masa lalu
dan kita bisa memperbaikinya cukup mudah.
Tapi dalam kasus ini, kita juga memiliki manfaat
menggunakan pernyataan printf langsung dalam untuk loop
untuk tahu persis di mana kesalahan yang terjadi.
Laporan Jadi printf adalah sangat berguna dalam membantu
Anda menentukan di mana, tepatnya di kode sumber Anda,
kesalahan tertentu terjadi.
>> Dan itu juga penting untuk menyadari itu, seperti yang kita menulis kode,
kita mungkin memiliki asumsi tentang keadaan program.
Atau kita mungkin memiliki asumsi tentang apa bagian dari program
sebenarnya benar atau salah ketika nanti seperti yang kita membangun program yang
dan menjadikannya bagian dari kompleks dan program yang lebih besar
bahwa kita menyadari bahwa beberapa aspek dari yang sebenarnya kereta.
>> Menggunakan printf benar-benar dapat membantu mempersempit dan mengidentifikasi
daerah dari sebuah program yang mungkin tidak akan berperilaku persis seperti yang kita
berharap, berdasarkan asumsi kami.
Tapi ada alat-alat lain tersedia, juga,
yang memungkinkan kita untuk mencoba untuk angka tahu di mana kesalahan terjadi
dan juga, secara khusus, hal apa yang terjadi di dalam program.
>> Jadi menggunakan printf sangat ketika kita ingin berguna
untuk mengidentifikasi daerah-daerah tertentu sebuah program yang memiliki beberapa bug.
Tapi itu juga menjadi membosankan setelah beberapa saat.
Dalam hal ini, ini adalah Program yang relatif sederhana
hanya dengan satu atau dua variabel.
Dan itu menjadi sangat mudah bagi kita untuk mencetak nilai variabel
dalam konteks program yang lebih besar.
>> Tapi kita mungkin memiliki berbeda program yang memiliki banyak variabel.
Dan hal itu mungkin tidak cukup sehingga mudah digunakan printf
mencoba untuk mengevaluasi apa yang terjadi untuk masing-masing dari variabel-variabel
sebagai program mengeksekusi.
Ada program yang ada disebut program debugger.
Dalam hal ini, salah satu yang kita akan penggunaan adalah debugger GNU, atau GDB,
yang memungkinkan kita untuk memeriksa internal kerja program dalam jauh lebih
cara rinci.
>> Kami benar-benar bisa menjalankan GDB dari baris perintah
di sini dengan hanya mengetik GDB dan perintah yang ingin kita untuk debug.
Dalam hal ini, menghitung.
Sekarang dalam kasus ini, kita dapat melihat bahwa itu membawa kita ke prompt yang mengatakan GDB.
Dan kita bisa benar-benar menjalankan perintah untuk GDB
untuk benar-benar memulai pelaksanaan Program, menghentikannya pada titik-titik tertentu,
mengevaluasi variabel dan memeriksa variabel yang
ada dalam program negara pada saat itu,
dan sebagainya dan sebagainya.
Ini memberikan banyak kekuatan untuk kita.
>> Tapi kebetulan bahwa CS50 IDE juga
menyediakan GUI atau pengguna interface untuk GDB yang
memungkinkan kita untuk melakukan hal ini tanpa perlu antarmuka baris perintah apapun
atau bahkan sama sekali.
Cara yang saya dapat mengakses adalah dengan menggunakan tombol men-debug
di bagian paling atas dari IDE CS50.
Sekarang di masa lalu, apa yang kita miliki dilihat adalah bahwa kita menggunakan perintah
line untuk mengkompilasi dan kemudian menjalankan program.
>> Tombol men-debug tidak kedua langkah tersebut.
Tetapi juga akan memunculkan debugger tab di paling kanan
yang memungkinkan kita untuk memeriksa berbagai sebuah sifat program
seperti yang mengeksekusi.
Jika saya klik debug, dalam hal ini kasus, hal itu akan memunculkan
tab baru di konsol jendela di bagian paling bawah.
>> Dan Anda dapat melihat bahwa tab ini memiliki beberapa informasi di bagian paling atas.
Dan kami sebagian besar dapat mengabaikan hal ini.
Tapi salah satu hal bahwa kita ingin melihat
adalah bahwa itu output hal yang sama bahwa kita
akan dapatkan jika kita mencoba untuk menjalankan make pada program C di jendela terminal.
>> Di sini, kita bisa melihat itu berjalan dentang, dan memiliki berbagai bendera,
dan itu kompilasi berkas count.c kami, yang merupakan tab yang dipilih pada saat itu
bahwa aku memukul debug.
Jadi ini sangat berguna karena sekarang menggunakan tombol debug,
kita secara bersamaan dapat mengkompilasi dan kemudian mengeksekusi program yang kita benar-benar
ingin menjalankan.
>> Salah satu bendera yang penting, dalam hal ini,
kita sudah benar-benar telah menggunakan untuk waktu yang lama
tetapi juga hanya melakukan beberapa tangan melambaikan [tak terdengar], yang
adalah salah satu ini di sini.
Dalam dentang, ia mengatakan -ggdb3.
Dalam hal ini, apa yang kita mengatakan dentang, kompiler kami,
adalah bahwa kita ingin mengkompilasi program kami.
Tetapi juga memberikan apa yang disebut informasi simbol
sehingga compiler sebenarnya memiliki akses untuk banyak informasi yang mendasari
terkandung dalam program ini.
>> Lebih khusus, nomor fungsi yang saya miliki,
nama-nama fungsi-fungsi, variabel, jenis
yang variabel tersebut adalah, dan varietas hal-hal lain yang membantu debugger
melakukan operasinya.
Sekarang ada hal lain yang penting untuk menyebutkan
ketika kita membahas berjalan program dengan cara ini.
>> Perhatikan bahwa ia memiliki sebenarnya dibesarkan tab baru di konsol kami
sepanjang bagian bawah.
Kami tidak lagi harus berinteraksi langsung dengan jendela terminal.
Tapi tab baru ini sebenarnya jendela terminal.
Itu hanya khusus untuk menjalankan program yang telah kita buat.
>> Perhatikan bahwa di bagian bawah, di kombinasi dengan beberapa output
oleh dentang compiler dan GDB, yang kita sebagian besar dapat mengabaikan,
itu benar-benar menunjukkan output dari program kami di bagian paling bawah.
Sekarang penting untuk menyadari bahwa jendela ini yang benar-benar
akan menunjukkan Output dari program Anda
tetapi juga dapat menerima input untuk program itu, juga.
>> Jadi pernyataan yang menyebutkan masukkan nomor,
yang merupakan output yang sama yang kita miliki telah di jendela terminal sebelumnya.
Tapi sekarang ditampilkan di tab baru ini.
Saya dapat memasukkan nomor.
Dan itu akan benar-benar fungsi seperti yang kita harapkan
menunjukkan kita men-debug kami, output, output yang mungkin kereta,
seperti yang telah kita lihat sebelumnya.
Dan di bagian paling bawah, itu sebenarnya memiliki beberapa output tambahan
dari PDB hanya mengatakan bahwa Program ini telah selesai.
>> Sekarang seperti yang Anda lihat dalam run khususnya melalui,
itu tidak terlalu berguna karena bahkan
meskipun kami memiliki menu debugger datang up, ini masih program berjalan.
Pada titik itu tidak benar-benar jeda eksekusi bagi kami
untuk dapat memeriksa semua variabel yang terkandung dalam.
Ada sesuatu yang lain yang harus kita lakukan dalam rangka
untuk mendapatkan GDB untuk mengakui bahwa kita ingin untuk menghentikan sementara eksekusi program
dan tidak hanya memungkinkan untuk melanjutkan biasanya seperti yang kita akan dalam hal lain.
>> Dalam rangka untuk menghentikan sementara eksekusi, di beberapa baris tertentu,
kita perlu membuat apa disebut titik istirahat.
Dan titik istirahat sangat mudah dibuat dalam hal ini CS50 IDE dengan mengambil mouse Anda
dan mengklik langsung ke kiri beberapa nomor baris tertentu.
Setelah saya melakukan itu, titik merah muncul, yang menunjukkan
bahwa garis yang sekarang menjadi titik istirahat.
>> Dan waktu berikutnya yang saya jalankan GDB, itu akan menghentikan eksekusi pada titik istirahat
saat mencapai bahwa baris kode.
Sekarang ini adalah penting hal untuk mewujudkan
bahwa itu belum tentu kasus bahwa setiap baris kode
sebenarnya diakses.
Jika saya harus membuat fungsi di sini, untuk example-- batal f--
dan hanya melakukan baris cetak sini-halo dunia-- jika saya tidak pernah memanggil fungsi ini,
itu akan menjadi kasus yang, jika saya menetapkan titik istirahat di sini,
fungsi akan pernah disebut.
Dan oleh karena itu, ini break point tertentu
tidak akan pernah benar-benar berhenti eksekusi program.
>> Jadi mari kita mengatakan bahwa saya benar membuat break point pada beberapa baris kode
yang akan benar-benar dijalankan.
Sekarang dalam kasus ini, ini adalah baris pertama dalam fungsi utama.
Sehingga pasti akan terjadi itu, segera setelah saya mulai eksekusi,
baris pertama akan tercapai.
GDB akan berhenti eksekusi.
Dan kemudian, aku akan dapat berinteraksi dengan debugger.
>> Anda dapat mengatur beberapa baris sebagai breakpoints, jika Anda ingin.
Kami juga dapat membuat line up di sini di segmen ini kode
yang tidak akan pernah tercapai.
Dan kita juga dapat mengatur satu lebih lanjut di bawah.
Alasan bahwa kita akan ingin melakukan hal ini kita akan
masuk ke sedikit lebih rinci dalam sesaat.
Jadi untuk saat ini, saya hanya menonaktifkan istirahat tambahan titik-titik
sehingga kita dapat melihat apa yang terjadi ketika saya memiliki satu break
titik dalam program saya.
Saya telah membuat beberapa perubahan program ini.
Jadi saya harus menyimpannya.
Aku akan men-debug klik sehingga saya bisa mulai kompilasi dan kemudian
pelaksanaan debugger.
>> Kita akan melihat bahwa, setelah saat, garis yang kita terpilih sebagai istirahat
Titik disorot dengan warna kuning.
Kita juga dapat melihat bahwa di atas tepat di panel men-debug
bahwa ikon jeda telah berubah menjadi ikon bermain sedikit.
Ini berarti bahwa kita memiliki jeda eksekusi, dalam kasus ini.
Dan memukul tombol Play akan memungkinkan kita untuk melanjutkan eksekusi
pada titik tertentu.
>> Perhatikan bahwa ada beberapa lainnya tombol yang tersedia di panel debug,
demikian juga.
Langkah lebih, yang memungkinkan saya untuk mengeksekusi bahwa satu baris kode
dan langkah ke baris ke berikutnya, yang, dalam hal ini,
akan berarti bahwa printf pernyataan dieksekusi.
Dan kemudian akan berhenti eksekusi pada baris 13, seperti begitu.
>> Dan ada juga langkah ke dalam fungsi, yang
berguna jika saya telah membuat lainnya fungsi lain dalam kode sumber.
Dan saya ingin melangkah ke fungsi-fungsi daripada
mengeksekusi fungsi yang secara keseluruhan.
Tapi kita akan melihat lebih pada langkah yang ke dalam fungsi hanya dalam beberapa saat.
Sekarang perhatikan beberapa hal lain yang benar-benar ada dalam panel debug.
>> Kami memiliki panel ini disebut panggilan stack, yang menunjukkan kepada kita
di mana tepatnya kita berada.
Dalam hal ini, kita berada di dalam dari fungsi utama.
Script kami disebut count.c.
Dan kita kebetulan berada di baris 13, kolom satu, yang
adalah tepat apa wilayah disorot dari kode sumber menunjukkan, juga.
>> Sekarang perhatikan bahwa ini juga menunjukkan di bawah bagian variabel lokal
semua variabel yang ada dalam fungsi ini.
Sangat penting untuk dicatat bahwa semua variabel
akan muncul dalam variabel lokal ini Bagian dalam fungsi,
bahkan sebelum mereka didefinisikan.
Kita bisa lihat di sini bahwa kita memiliki variabel disebut num, memiliki nilai default 0,
dan itu adalah tipe int.
>> Sekarang sebelum kita benar-benar menginisialisasi semua variabel,
kita tidak perlu dijamin untuk melihat nilai 0.
Dan tergantung pada eksekusi lain bahwa Anda telah melakukan
dan keadaan memori Anda ketika Anda benar-benar menjalankan program ini,
Anda mungkin menemukan bahwa Anda tidak melihat nilai 0
dan, sebaliknya, beberapa nomor gila lainnya.
>> Tapi jangan khawatir tentang itu.
Ini tidak akan menjadi relevan sampai Anda benar-benar menginisialisasi nilai.
Sekarang dalam kasus ini, kita dapat melihat bahwa Saya telah melakukan beberapa output.
Dan aku, sekarang, berhenti eksekusi.
Tapi dalam kasus ini, apa Aku benar-benar ingin melakukan
adalah untuk sekarang melangkahi garis ini kode sehingga saya benar-benar bisa
query pengguna untuk itu int yang kita ingin menggunakan dalam program kami.
>> Sekarang dalam kasus ini, ketika Aku memukul melangkahi, pemberitahuan
bahwa Jeda atau lebih tepatnya Resume tombol telah berubah menjadi tombol Pause ini
karena kode ini sebenarnya mengeksekusi.
Apa yang terjadi sekarang adalah bahwa hal itu
menunggu kita untuk memasukkan beberapa informasi seperti yang kita dapat melihat dengan teks output kami
di bagian paling bawah.
>> Jadi sekarang, ini adalah tidak benar-benar berhenti,
meskipun itu, semacam, muncul menjadi karena tidak ada yang terjadi.
Tapi kebetulan bahwa dalam kasus tertentu saya on line 13,
Aku sedang menunggu input pengguna.
Dan GDB tidak mampu memeriksa program seperti yang berjalan.
>> Sekarang waktu berikutnya yang saya masukkan beberapa input-- jadi saya akan memasukkan nomor 5,
seperti yang kita lihat dalam past-- tekan Kembali, dan kami
melihat bahwa, segera, GDB jeda dan, sekali lagi, menyoroti baris berikutnya.
Tapi melihat bahwa sekarang, sebagai Hasil kami memasukkan nilai,
kami telah memperbarui nilai yang dalam variabel lokal kami, yang
sangat berguna untuk mengetahui secara tepat apa nomor yang ada di memori.
>> Sekarang saya bisa memungkinkan program ini untuk terus bermain sampai akhir pelaksanaannya
dengan memukul Lanjutkan.
Kita bisa melihat bahwa sangat cepat tidak selesai Program mengeksekusi
dengan output yang sama bahwa kita sebelumnya, debugger menutup,
dan sekarang program ini telah berhenti sepenuhnya.
>> Saya menunjukkan bahwa hanya untuk tujuan melihat apa
terjadi ketika kita benar-benar memukul Lanjutkan.
Tapi kita benar-benar akan ingin kembali ke dalam program ini
sehingga kita dapat mencoba untuk debug tepatnya apa yang terjadi.
Sekarang bahwa saya menggunakan debugger, saya mungkin tidak perlu debug laporan printf ini.
>> Jadi saya bisa menghapusnya karena saya akan melakukan sekarang hanya untuk kembali ke kode sederhana kami
bahwa kita memiliki beberapa saat yang lalu.
Sekarang ketika saya menyimpan program dan jalankan,
akan, lagi, pergi ke awal yang istirahat saat itu saya harus on line 11.
Dan saya akan dapat memeriksa variabel saya seperti yang saya ingin lakukan.
>> Kebetulan yang ini bagian tidak sangat menarik,
Dan aku tahu bahwa aku akan untuk mencetak pernyataan ini.
Silakan masukkan nomor.
Dan kemudian, aku tahu bahwa aku akan untuk meminta pengguna untuk integer yang.
Jadi mungkin, aku benar-benar ingin pindah saya titik istirahat sedikit lebih bawah.
>> Anda dapat menghapus break point dengan mengklik, sekali lagi, langsung
di sebelah kiri yang nomor baris.
Itu titik merah akan hilang, menunjukkan bahwa break point sekarang hilang.
Sekarang dalam kasus ini, eksekusi telah berhenti.
Dan sehingga tidak benar-benar akan melanjutkan dalam contoh khusus.
Tapi aku bisa mengatur istirahat menunjukkan sedikit kemudian.
>> Dan ketika saya sekarang melanjutkan saya kode, akan melanjutkan dan memberitahu
titik titik istirahat.
Sekali lagi, aku memukul Lanjutkan.
Tidak tampak seperti ada sesuatu yang terjadi.
Tapi itu karena saya Kode menunggu masukan.
Saya akan memasukkan nomor 5, tekan Enter, dan sekarang titik istirahat berikutnya akan terkena.
>> Sekarang dalam kasus ini, ini adalah baris kode
bahwa, sebelumnya, kami tahu kebetulan kereta.
Jadi mari kita mengevaluasi apa yang terjadi pada titik tertentu dalam waktu.
Ketika garis disorot, ini garis belum dieksekusi.
Jadi dalam hal ini, kita dapat melihat bahwa saya memiliki nomor, yang
Saya memiliki sebuah integer disebut num yang memiliki nilai 5.
Dan aku akan tampil beberapa matematika di nomor itu.
>> Jika saya melangkah lebih dari itu, kita dapat melihat bahwa nilai num
telah berubah sesuai dengan aritmatika bahwa kita sudah benar-benar dilakukan.
Dan sekarang bahwa kita dalam hal ini untuk loop
atau sekarang bahwa untuk loop sendiri disorot,
kita melihat bahwa kita memiliki baru variabel yang disebut i yang
akan digunakan dalam untuk loop.
>> Sekarang ingat sebelum itu saya disebutkan bahwa kadang-kadang Anda
akan melihat beberapa jenis gila nomor sebagai default sebelum nomor yang
atau variabel yang sebenarnya diinisialisasi.
Kita bisa melihat bahwa justru di sini di variabel ini
disebut i, yang belum belum diinisialisasi
pada saat menyoroti.
Tapi kita dapat melihat bahwa ia memiliki beberapa nomor bahwa kita tidak akan benar-benar berharap.
>> Tidak apa-apa.
Jangan khawatir tentang hal itu karena kita belum benar-benar
diinisialisasi jumlah yang sampai aku melangkahi garis ini dan nilai
i telah diinisialisasi dengan nilai 1.
Jadi untuk melihat bahwa itu sebenarnya kasus, mari kita melangkah lebih.
Kita sekarang dapat melihat bahwa yang garis telah dieksekusi.
Dan kita sekarang menyoroti baris printf ini.
>> Dan kita sekarang dapat melihat bagaimana nilai-nilai kita i dan 3 telah berubah dari waktu ke waktu.
Hal ini sangat berguna untuk dilakukan, pada kenyataannya, adalah langkah di atas garis berulang kali.
Dan Anda dapat menemukan apa yang sebenarnya terjadi dalam untuk loop Anda
dan apa yang terjadi pada variabel dalam yang untuk loop
sebagai pelaksanaan program yang terjadi satu langkah pada satu waktu.
>> Sekarang pada saat ini, saya melangkahi cukup
bahwa saya sekarang saya di akhir program saya.
Jika saya melangkah lebih dari itu, itu akan sebenarnya berhenti eksekusi
seperti yang kita lihat di masa lalu.
Biarkan saya memulai ini, lagi-lagi, sehingga bahwa saya bisa menunjukkan sesuatu yang lain keluar,
demikian juga.
>> Dalam hal ini, itu adalah sekarang meminta saya, sekali lagi,
untuk nomor, yang Saya akan, lagi, masuk.
Tapi kali ini, saya akan masuk dalam jumlah yang lebih besar sehingga untuk loop
akan iterate kali.
Dalam hal ini, saya akan untuk memasukkan nilai 11.
>> Sekarang lagi karena saya akan mengatur break point pada baris 15,
itu akan menyoroti garis.
Kita dapat melihat bahwa kami nomor 11 adalah benar
direpresentasikan dalam variabel lokal kami.
Melangkahi itu, kita dapat sekarang menonton apa yang terjadi pada nilai kami i
seperti yang kita lanjutkan dalam ini untuk loop.
Ini akan bertambah setiap kali kita mencapai puncak yang untuk loop.
>> Sekarang salah satu hal yang mungkin berguna untuk melakukan selama eksekusi
dari program ini adalah bagi saya untuk benar-benar mengubah variabel tengah jalan untuk melihat
apa yang terjadi pada program saya.
Dalam hal ini, saya benar-benar bisa klik dua kali nilai.
Perhatikan bahwa itu menjadi kolom teks.
>> Sekarang saya bisa masuk berbeda menghargai sama sekali
untuk melihat bagaimana program saya berperilaku ketika aku sudah berubah variabel itu.
Sekarang dalam kasus ini, variabel i sekarang berisi nilai 10.
Namun program ini masih berhenti di eksekusi.
Ketika saya melangkah lebih, saya melihat bahwa nilai i, yang saya dimasukkan sebagai 10,
tidak lebih besar dari nilai num, yang segera menyebabkan untuk loop
untuk menghentikan mengeksekusi.
>> Nah, itu bukan satu-satunya Alasan mengapa Anda akan
ingin memodifikasi variabel di tempat.
Anda mungkin benar-benar ingin untuk mencoba memodifikasinya sehingga
Anda dapat melanjutkan eksekusi loop
atau sehingga Anda dapat memodifikasi beberapa nilai sebelum
mencapai beberapa set tertentu dari aritmatika bahwa Anda sedang melakukan.
>> Jadi sekarang kita benar-benar mengubah nilai i sebagai program mengeksekusi,
itu disebabkan untuk loop untuk berhenti prematur karena, tiba-tiba, saya
terjadi lebih besar dari nilai num, artinya bahwa untuk loop
tidak lagi diperlukan untuk dieksekusi.
Selanjutnya, hal itu terjadi untuk menjadi hal ini kita mengubah nilai dari i
ketika garis 17 disorot, yang merupakan titik waktu
bahwa untuk pelaksanaan lingkaran sebenarnya sedang dievaluasi.
>> Jika saya telah mengubah nilai i pada baris yang berbeda, mengatakan 19,
kita akan melihat yang berbeda perilaku karena baris 19 akan
telah dijalankan sebelum loop Kondisi itu dievaluasi ulang.
Sekarang pada titik ini, saya, lagi, pada akhir program ini.
Dan aku bisa membiarkan ini melanjutkan ke memungkinkan program saya untuk berhenti secara alami.
Tapi ada beberapa hal yang penting untuk mengambil
dari diskusi khusus ini.
Anda perlu mengevaluasi asumsi Anda sendiri
tentang bagaimana kode harus berperilaku.
Setiap kali Anda berpikir bahwa beberapa bagian kode Anda tahu terjadi untuk bekerja,
yang mungkin bendera merah untuk pergi kembali dan mengevaluasi, dan pastikan
bahwa asumsi Anda bagaimana kode yang beroperasi
sebenarnya benar bagaimana itu dinyatakan dalam kode sumber Anda.
>> Tetapi bahkan lebih ke titik itu, ketika kita menggunakan debugger,
Anda dapat menempatkan breakpoints di baris yang berbeda dari kode,
yang akan menyebabkan debugger untuk jeda eksekusi pada masing-masing baris
sehingga Anda dapat mengevaluasi memori atau bahkan mengubahnya di tempat.
Dan lagi, ingat bahwa Anda dapat membuat beberapa breakpoints sehingga Anda
juga dapat melanjutkan eksekusi, melewatkan lebih besar bagian dari kode,
dan secara otomatis akan berhenti pada titik istirahat berikutnya.
>> Ada sebenarnya yang lebih maju fitur dari debugger, juga.
Tapi kita harus merujuk Anda untuk beberapa video berikutnya
agar benar-benar menggoda terpisah bagaimana menggunakan fungsi-fungsi tertentu.
Untuk saat ini, terima kasih sangat banyak untuk menonton.
Dan keberuntungan debugging.