[Powered by Google Translate] GDB, Projek GNU Debugger, adalah alat debugging berkuasa untuk C, bersama-sama dengan banyak bahasa-bahasa lain. Ia membolehkan anda untuk mencucuk di sekitar di dalam program C anda semasa mereka sedang melaksanakan, dan ia juga memberikan anda peluang untuk melihat apa yang berlaku apabila kemalangan program anda. Ia cukup bagus, betul-betul? GDB adalah perisian bebas, dan ia berfungsi pada banyak popular UNIX dan Sistem operasi berasaskan Windows, jadi ia adalah alat yang sangat meluas. Anda perlu belajar untuk menyukainya. Kebaikan GDB mempunyai masa yang lebih mudah mengesan pepijat daripada mereka yang kekacauan melalui tekaan dan jumlah terhingga penyata cetakan. GDB adalah alat baris arahan, yang bermakna anda boleh berinteraksi dengan ia di terminal mengeluarkan arahan melalui keyboard dan bukannya klik butang dengan tetikus anda. Untuk memulakan GDB, anda benar-benar hanya jenis Pra-Pemasangan di prompt dan tekan enter. Anda akan melihat beberapa baris dicetak keluar ke skrin menunjukkan anda versi GDB bahawa anda sedang berjalan, maklumat hakcipta, dan pada akhir anda akan melihat prompt GDB: (Pra-Pemasangan). Ini membolehkan anda tahu bahawa GDB adalah bersedia untuk arahan. Pada ketika ini, perkara yang paling penting untuk mengetahui bagaimana untuk melakukannya berhenti. Mujurlah, ini adalah agak mudah. Arahan berhenti tidak hanya itu. Sebagai cara pintas, anda hanya boleh menggunakan q juga. Sebagai menyeronokkan sebagai boot sehingga GDB dan kemudian segera berhenti, Sekarang mari kita bercakap tentang menggunakan GDB untuk membantu debug program. Untuk bermula, saya telah mendapat satu program di sini di factorial.c yang mendapat int dan cuba untuk mengira faktorial. Dalam kes anda tidak dilihat faktorial sebelum atau tidak ingat mereka, Faktorial nombor n adalah sama dengan produk n - (n - 1), (n - 2), dan sebagainya - sehingga anda mencecah 1. Oleh itu, faktoran 3 3 * 2 * 1, atau 6, dan faktoran 4 4 * 3 * 2 * 1, atau 24. Faktorial sifar adalah satu kes yang ganjil, ia adalah 1, dan faktorial integer negatif tidak ditakrifkan. Bagaimanapun, sesuatu tentang program faktorial saya adalah 'funky'. Apabila saya berlari, ia mencetak keluar nombor pelik yang tidak mempunyai apa-apa kaitan dengan faktorial. Jadi, kita boleh menggunakan GDB untuk membantu memikirkan apa yang berlaku. GDB beroperasi pada fail boleh laku, yang fail perduaan yang dihasilkan oleh proses penyusunan. Iaitu, kita tidak boleh menjalankan GDB pada c. Atau h fail kod sumber seperti factorial.c. Kami mahu menjalankan hanya faktorial sebaliknya. Jika program ini memerlukan apa-apa hujah baris arahan, ini adalah di mana kita akan menentukan mereka. Dalam kes ini, faktorial tidak memerlukan apa-apa hujah baris arahan, jadi kita hanya perlu menaip jangka atau r bagi pendek. Ini akan memulakan program berjalan faktorial. Apabila program berhenti berjalan, saya akan mendapat GDB saya segera kembali. Baiklah, mari kita mencuba perkara yang sama sekali lagi, faktorial daripada 4. Baiklah, kita lihat bahawa kita sedang mendapat jenis yang sama sampah di sini dalam GDB. Sekarang bahawa program telah selesai, kita tidak boleh pergi dan mengakses mana-mana negeri, jadi kita perlukan untuk memulakan ia berjalan lagi sebelum kita dapat melihat apa yang berlaku. Walau bagaimanapun, kita memerlukan satu cara untuk menghentikan ia semasa ia di tengah-tengah berjalan. Untuk berbuat demikian, kita menggunakan apa yang dipanggil titik putus. Titik putus memberitahu GDB untuk berhenti program pada majlis tertentu atau sumber garis kod supaya kita boleh memeriksa keadaan program, nilai-nilai pembolehubah, negeri memori dan apa-apa, pada ketika itu. Kerana saya tidak benar-benar tahu di mana perkara-perkara yang berlaku salah, Saya hanya mahu untuk memulakan debugging betul-betul di awal-awal lagi, betul apabila utama bermula. Kami akan menetapkan titik putus di awal utama menggunakan arahan rehat. Kita juga boleh menggunakan b untuk menyingkatkan rehat. Sekarang mari kita mulakan program ini berjalan lagi. Di sini kita berada di awal utama, seperti GDB memberitahu kita. Baris kod yang kira-kira untuk melaksanakan tetapi masih belum adalah garis printf. Kita boleh memberitahu GDB untuk melaksanakan garis kod ini dan pergi ke baris seterusnya dengan arahan seterusnya atau n. Baiklah, sekarang GDB memberitahu kita bahawa kita berada on-line GetInt. Saya tahu bahawa ia seolah-olah seperti garis printf tidak menjalankan kerana kita tidak nampak "Masukkan integer positif" print out pada skrin, tetapi ia sebenarnya tidak dijalankan. Apa yang kita nampak ialah sistem operasi menyekat apa-apa penulisan ke skrin sehingga ia benar-benar mempunyai, yang mengapa debugging dengan cetakan kadang-kadang boleh kelihatan dipercayai. Bagaimanapun, mari kita sekali lagi pergi ke baris seterusnya kod dan masukkan dalam int. Sekali lagi, mari kita jenis 4. Jadi ini kelihatan pelik. Kami on line 12 mengikut GDB, tetapi barisan depan yang kira-kira untuk melaksanakan adalah hanya bersedia kerinting. Itu hanya bermakna kita berada di akhir gelung, kami melakukan gelung while pada hakikatnya, dan GDB memberitahu kita bahawa keadaan penamatan iaitu tiada kurang daripada sifar, akan melaksanakan seterusnya. Jika ini pernah mendapat sedikit mengelirukan, kita boleh tarik sehingga kod sumber GDB dengan senarai atau perintah l. Ini mencetak keluar kod sumber yang berpusat di sekitar garis bahawa kita kini. Jika kita menaip senarai atau l lagi, kita akan melihat set garisan seterusnya mencetak. Kita boleh melakukan ini sehingga kita mencapai akhir fail. Untuk kembali kepada di mana kita berada, kita boleh membekalkan senarai dengan bilangan garisan, dalam kes ini, line 12. Bagaimanapun, mari kita beralih. Sekarang kita berada di gelung 4. Mari kita pastikan bahawa pembolehubah num kita mengandungi 4. Kami melakukan ini dengan cetak, atau p, perintah. Jadi, GDB memberitahu kita bahawa num memang menyimpan 4, seperti yang kita harapkan. $ 1 GDB yang mencetak keluar adalah pembolehubah GDB khas yang kini bersedia untuk menyimpan 4 nombor juga. Anda boleh mengabaikan ini untuk sekarang, tetapi ini pembolehubah GDB datang dalam berguna super dalam kes-kes yang lebih maju apabila anda mahu ingat apa yang anda telah lakukan pada masa lalu. Bagaimanapun, bergerak ke atas dengan seterusnya, kita melihat bahawa kita mula bergerak melalui gelung. Mari kita menyimpan akan melalui di sini dengan n sedikit demi sedikit. Bukannya menaip n setiap kali, anda boleh juga hanya tekan enter. Apabila anda menekan enter tanpa menaip apa-apa, GDB hanya mengulangi arahan sebelumnya. Jadi sekarang kita telah melanda panggilan printf. Ia kelihatan seperti sesungguhnya kami telah melalui kami untuk gelung 4 kali, yang adalah apa yang kita mahu lakukan dalam usaha untuk membiak sebanyak 1, 2, 3, dan 4. Semuanya seolah-olah seperti ia bekerja, kecuali apabila kita memukul seterusnya lagi, kita akan mendapat nombor ini besar bukannya daripada 24. Jika kita mencetak keluar nilai p faktorial menggunakan, kita lihat bahawa faktorial tidak mempunyai nombor ini secara besar-besaran di dalamnya. Sesuatu yang pasti akan salah. Pada ketika ini, walaupun, kita hampir pada akhir program, dan ia terlalu lewat untuk menetapkan apa-apa. Walau bagaimanapun, kita boleh memulakan semula program dengan menaip r lagi dan kemudian y untuk mengesahkan. Sekarang kita kembali pada titik putus kami pada awal utama. Kita tahu bahawa segala-galanya seolah-olah menjadi halus dengan membaca di n. jadi kita boleh melompat ke hadapan dengan n. Selain itu, kita boleh menetapkan titik putus baru selepas melakukan gelung while dan melompat sana. Mari kita berbuat demikian. Kelihatan seperti line 14 datang hanya selepas gelung. Mari kita menetapkan titik putus di sana. Ia adalah amalan yang baik untuk nyatakan nama fail arahan titik putus ini sejak GDB boleh terkeliru jika anda bekerja dengan beberapa fail. Untuk bergerak ke hadapan titik putus ini, kita akan menggunakan terus atau arahan c. Okay, di sini kita berada di untuk gelung. Mari kita pergi line 1 lagi ke untuk gelung, dan kemudian kita akan memulakan pembolehubah percetakan untuk melihat apa yang berlaku. Mari kita pastikan bahawa saya memang 1, seperti yang diharapkan. Yup, itu semua baik. Bagaimana pula dengan faktorial walaupun? Wah, yang tidak baik. Kami telah mendapat nombor negatif yang besar di sini. How'd yang berlaku? Nah, jika kita melihat kembali pada kod, kita lihat bahawa kita tidak pernah dimulakan ia, jadi kita baru sahaja mendapat sampah di sana. Itu pasti akan membuang dari pengiraan kami. Mujurlah, kita tidak perlu untuk meninggalkan GDB untuk menetapkan ini. Kita boleh memulakan ia di sini dan menetapkan ia dalam kod kemudian menggunakan perintah cetak. Kami akan memulakan ia 1 sejak faktorial sifar dan 1 berjarak 1, dan jika kita memulakan kepada sifar, maka kita sentiasa akan berakhir dengan sifar sebagai hasil kami. Anda boleh menetapkan sebarang ubah cara ini, yang adalah sangat berguna. Sekarang, mari kita meneruskan program kami. Mari kita pastikan segala-galanya di mana ia sepatutnya. Num harus 4, i perlu menjadi 1, dan faktorial seharusnya 1 terlalu. Kita boleh Shortcut proses ini dan mencetak semua pembolehubah tempatan kita dengan super-membantu info arahan penduduk tempatan, yang mencetak keluar semua pembolehubah dalam skop tempatan. Bagaimanapun, ia kelihatan seperti segala-galanya baik untuk pergi. Mari kita buat lain pergi sekitar gelung hanya untuk memastikan. Okay, segala-galanya kelihatan hebat. Sekarang kita boleh menggunakan arahan terus pergi ke akhir. Manis! 4 faktorial dicetak 24 seperti yang diharapkan. Sekarang kita boleh pergi menetapkan ini dalam kod kami. Bukannya berhenti daripada GDB, kita akan menggunakan lain tab terminal untuk melakukan ini. Melangkah kembali ke tab GDB kami, kami kini perlu untuk susun laku kita. Salah satu perkara terbaik mengenai GDB adalah bahawa anda tidak perlu untuk meninggalkan GDB untuk menjalankan membuat. Supaya kita tidak terus memukul titik putus lama, mari kita melumpuhkan mereka dengan, anda fikirkan, melumpuhkan arahan. Ini akan melumpuhkan semua titik putus kami. Sekarang, kita boleh memulakan semula program dengan r dan pastikan semuanya okay. Kelihatan seperti segala-galanya baik untuk pergi. Faktorial daripada 4 cetakan keluar 24, sama seperti kita fikir. GDB adalah salah satu alat yang paling berguna anda telah mendapat dalam toolbox anda. Terdapat lebih satu tan perkara yang anda boleh lakukan dengan GDB, jauh lebih daripada anda boleh lakukan dengan cetakan mudah. Masa depan program anda tidak melakukan apa yang anda ingin, cuba menjalankan GDB untuk mengetahui apa yang berlaku di dalam. Dengan sedikit amalan, anda akan dapat untuk menggerudi ke kanan pada pepijat anda dalam masa yang singkat. Nama saya adalah Nate Hardison. Ini adalah CS50.