Dasar-Dasar Valgrind
Deteksi kebocoran dan error
Dasar-Dasar Valgrind 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.
Apa Itu Valgrind
Valgrind adalah kerangka instrumentasi. Alat bawaannya, Memcheck, mendeteksi kebocoran dan kesalahan memori tanpa kompilasi ulang, dengan menjalankan program Anda pada CPU sintetis.
Menjalankan Memcheck
Jalankan Valgrind sebelum program Anda. Kompilasikan terlebih dahulu dengan -g agar nomor baris tersedia.
g++ -g main.cpp -o app
valgrind --leak-check=full ./appMendeteksi Kebocoran
Memcheck melaporkan memori yang masih dialokasikan saat program keluar, lalu mengklasifikasikannya sebagai hilang pasti, hilang secara tidak langsung, atau masih dapat dijangkau.
#include <cstdlib>
int main() {
int* p = (int*)malloc(40); // never freed -> definitely lost
return 0;
}Kategori Kebocoran
Pahami kategori dalam laporan.
- Hilang pasti: tidak ada pointer yang tersisa; ini kebocoran nyata
- Hilang secara tidak langsung: hanya dapat dijangkau melalui blok yang hilang
- Masih dapat dijangkau: pointer masih ada saat program keluar (sering kali tidak berbahaya)
Pembacaan dan Penulisan Tidak Valid
Memcheck menandai akses ke memori yang belum dialokasikan atau sudah dibebaskan, serta melaporkan alamat dan ukurannya.
#include <cstdlib>
int main() {
int* a = (int*)malloc(2 * sizeof(int));
a[5] = 1; // invalid write past the block
free(a);
return 0;
}Nilai yang Belum Diinisialisasi
Memcheck memberikan peringatan ketika kondisi atau keluaran bergantung pada nilai yang belum diinisialisasi, yang merupakan sumber umum kesalahan nondeterministik.
#include <iostream>
int main() {
int x; // uninitialized
if (x == 42) // use of uninitialized value
std::cout << "hi\n";
return 0;
}Membaca Keluaran
Setiap blok kesalahan menampilkan operasinya, jejak tumpukan yang bermasalah, dan (untuk blok heap) tempat memori dialokasikan. HEAP SUMMARY menjumlahkan alokasi dan kebocoran.
Opsi Berguna
Opsi umum:
--leak-check=full: merinci setiap kebocoran--show-leak-kinds=all--track-origins=yes: melacak nilai yang belum diinisialisasi hingga ke sumbernya--error-exitcode=1: membuat integrasi berkelanjutan gagal jika ada kesalahan
Valgrind dan ASan
Keduanya menemukan kesalahan memori, dengan kelebihan dan kekurangan masing-masing.
- Valgrind: tidak memerlukan kompilasi ulang, lebih lambat (10–50 kali lipat), dan sangat baik dalam menangkap pembacaan yang belum diinisialisasi
- ASan: memerlukan kompilasi ulang, jauh lebih cepat, dan lebih baik dalam mendeteksi luapan tumpukan
Menekan Masalah yang Diketahui
Pustaka pihak ketiga dapat menghasilkan laporan yang tidak relevan. Buat dan terapkan berkas penekanan dengan --gen-suppressions=all dan --suppressions=file untuk menyembunyikan laporan yang diketahui tidak berbahaya.
Kapan Menggunakan Valgrind
Gunakan Valgrind ketika Anda tidak dapat melakukan kompilasi ulang dengan alat sanitasi, memerlukan pelacakan nilai yang belum diinisialisasi secara tepat, atau menginginkan pemeriksaan kedua. Jika tidak, ASan biasanya lebih cepat untuk integrasi berkelanjutan rutin.
Pemeriksaan Cepat
Ingat kembali kategori kebocoran.
Rangkuman
Anda telah mempelajari dasar-dasar Valgrind.
- Memcheck menemukan kebocoran, akses tidak valid, dan pembacaan yang belum diinisialisasi tanpa kompilasi ulang
- Jalankan dengan
--leak-check=full --track-origins=yes - Jenis kebocoran: hilang pasti / hilang secara tidak langsung, masih dapat dijangkau
- Lebih lambat daripada ASan, tetapi sangat baik untuk kesalahan nilai yang belum diinisialisasi
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar-Dasar Valgrind” gratis?
Ya — teks lengkap “Dasar-Dasar Valgrind” 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 “Dasar-Dasar Valgrind”?
Deteksi kebocoran dan error 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 “Dasar-Dasar Valgrind” 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
- Menggunakan gdb dan lldb
- AddressSanitizer
- UBSan dan TSan
- Dasar-Dasar Valgrind