0Pricing
C++ Academy · Pelajaran

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 ./app

Mendeteksi 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

  1. Menggunakan gdb dan lldb
  2. AddressSanitizer
  3. UBSan dan TSan
  4. Dasar-Dasar Valgrind
← Kembali ke C++ Academy