Membaca Laporan
Tafsirkan output.
Membaca Laporan adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C Academy mencakup 4 pelajaran total.
Anatomi Laporan
Laporan Valgrind memiliki tiga bagian:
- Awalan ID proses pada setiap baris
- Satu atau beberapa blok kesalahan saat kesalahan terjadi
- HEAP dan LEAK SUMMARY terakhir saat program keluar
Mempelajari cara membaca setiap bagian mengubah deretan teks panjang menjadi daftar tugas yang jelas.
Awalan PID
Setiap baris Valgrind diawali dengan ==PID==, misalnya ==12345==.
Itu adalah ID proses, bukan bagian dari keluaran program Anda. Awalan ini memungkinkan Anda memisahkan pesan Valgrind dari printf program Anda ketika keduanya menggunakan terminal yang sama.
==12345== Memcheck, a memory error detector
==12345== Command: ./prog
==12345==Contoh Blok Kesalahan
Berikut adalah blok invalid-write yang nyata:
==12345== Invalid write of size 4==12345== at 0x4005A1: main (prog.c:6)==12345== Address 0x520304c is 0 bytes after a block of size 20 alloc'd==12345== at 0x4838B40: malloc==12345== by 0x40058E: main (prog.c:5)
Baca Baris Pertama
Baris pertama menyebutkan jenis dan ukuran kesalahan: 'Invalid write of size 4'.
Ukuran 4 berarti akses sebesar 4 byte, biasanya berupa int. Satu baris ini memberi tahu kategori bug yang perlu Anda cari sebelum membaca lebih lanjut.
Baca Jejak Tumpukan
Baris at adalah bingkai terdalam, tempat kesalahan terjadi. Setiap baris by adalah pemanggil, satu tingkat di atasnya.
Bacalah dari atas ke bawah, dari yang paling dalam ke yang paling luar. Bingkai pertama yang memuat nama berkas milik Anda hampir selalu merupakan lokasi bug.
==12345== at 0x4005A1: do_work (work.c:12)
==12345== by 0x4006F0: main (main.c:8)Baca Catatan Alamat
Baris Address ... menunjukkan lokasi akses relatif terhadap blok yang diketahui:
0 bytes after a block of size 20 alloc'd— luapan tepat setelah batas akhir4 bytes inside a block of size 4 free'd— penggunaan setelah pembebasanon thread 1's stack— akses pada tumpukan
Baris tersebut juga menunjukkan tempat blok itu dialokasikan atau dibebaskan.
HEAP SUMMARY
Saat program keluar, Anda mendapatkan pencatatan alokasi:
==12345== HEAP SUMMARY:==12345== in use at exit: 20 bytes in 1 blocks==12345== total heap usage: 3 allocs, 2 frees, 1,044 bytes allocated
'in use at exit' yang lebih besar dari nol berarti ada sesuatu yang belum dibebaskan.
LEAK SUMMARY
Di bawah ringkasan heap, kebocoran dikelompokkan:
definitely lost: 20 bytes in 1 blocksindirectly lost: 0 bytes in 0 blockspossibly lost: 0 bytes in 0 blocksstill reachable: 0 bytes in 0 blocks
Tambahkan --leak-check=full untuk menyertakan jejak pada setiap blok yang hilang.
ERROR SUMMARY
Baris paling terakhir menghitung semuanya:
ERROR SUMMARY: 2 errors from 2 contexts
'context' adalah lokasi kesalahan yang unik. Jika baris yang bermasalah dijalankan satu juta kali dalam sebuah perulangan, baris itu tetap merupakan satu context. Tujuan Anda adalah 0 errors from 0 contexts.
Urutan Penanganan
Tangani laporan secara sistematis:
- Perbaiki kesalahan akses yang tidak valid terlebih dahulu karena kesalahan tersebut menyebabkan kerusakan
- Kemudian perbaiki kesalahan nilai yang belum diinisialisasi
- Setelah itu, tangani kebocoran yang definitely dan indirectly lost
- Jalankan ulang setelah setiap perbaikan; satu penyebab utama sering kali menghapus beberapa laporan sekaligus
Menyembunyikan Gangguan yang Diketahui
Beberapa kesalahan berasal dari pustaka yang tidak dapat Anda perbaiki, seperti runtime C atau pengandar grafis. Buat berkas penekanan untuk membungkam kesalahan tersebut tanpa menyembunyikan bug Anda sendiri.
--gen-suppressions=all mencetak entri penekanan siap pakai yang dapat Anda simpan dan gunakan kembali dengan --suppressions=file.
valgrind --gen-suppressions=all ./prog
valgrind --suppressions=mine.supp ./progPemeriksaan Cepat
Tafsirkan satu baris dari sebuah laporan.
Ringkasan
Sekarang Anda dapat membaca laporan Valgrind dari awal hingga akhir:
==PID==menjadi awalan baris Valgrind sehingga terpisah dari keluaran program- Setiap blok kesalahan memberikan jenis, ukuran, jejak tumpukan, dan catatan alamat
- Ringkasan HEAP/LEAK mencatat alokasi dan memori yang hilang
- ERROR SUMMARY menghitung context yang unik; targetkan nol
Tangani kesalahan akses terlebih dahulu, kemudian kebocoran, dan jalankan ulang setiap kali melakukan perbaikan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membaca Laporan” gratis?
Ya — teks lengkap “Membaca Laporan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C Academy, upgrade ke CoddyKit PRO. Kursus C Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membaca Laporan”?
Tafsirkan output. Kamu berlatih C Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C Academy?
Tidak diperlukan pengalaman sebelumnya. C Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Membaca Laporan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C Academy ini?
Ya. Setiap pelajaran C Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengapa Valgrind
- Mendeteksi Kebocoran
- Akses Tidak Valid
- Membaca Laporan