Bagikan melalui


Panduan: Menganalisis kode C/C++ untuk cacat

Panduan ini menunjukkan cara menganalisis kode C/C++ untuk potensi cacat kode. Ini menggunakan alat analisis kode untuk kode C/C++.

Dalam panduan ini, Anda akan:

  • Jalankan analisis kode pada kode asli.
  • Menganalisis peringatan cacat kode.
  • Perlakukan peringatan sebagai kesalahan.
  • Buat anotasi kode sumber untuk meningkatkan analisis cacat kode.

Prasyarat

  • Salinan Sampel CppDemo.
  • Pemahaman dasar tentang C/C++.

Menjalankan analisis kode pada kode asli

Untuk menjalankan analisis cacat kode pada kode asli

  1. Buka solusi CppDemo di Visual Studio.

    Solusi CppDemo sekarang mengisi Penjelajah Solusi.

  2. Pada menu Build, pilih Build ulang Solusi.

    Solusi dibangun tanpa kesalahan atau peringatan.

  3. Di Penjelajah Solusi, pilih proyek CodeDefects.

  4. Pada menu Proyek, pilih Properti.

    Kotak dialog Halaman Properti CodeDefects ditampilkan.

  5. Pilih halaman properti Analisis Kode.

  6. Ubah properti Aktifkan Analisis Kode pada Build menjadi Ya. Pilih OK untuk menyimpan perubahan.

  7. Membangun kembali proyek CodeDefects.

    Peringatan analisis kode ditampilkan di jendela Daftar Kesalahan.

  1. Buka solusi CppDemo di Visual Studio.

    Solusi CppDemo sekarang mengisi Penjelajah Solusi.

  2. Pada menu Build, pilih Build ulang Solusi.

    Solusi dibangun tanpa kesalahan atau peringatan.

    Catatan

    Di Visual Studio 2017, Anda mungkin melihat peringatan E1097 unknown attribute "no_init_all" memacu di mesin IntelliSense. Anda dapat dengan aman mengabaikan peringatan ini.

  3. Di Penjelajah Solusi, pilih proyek CodeDefects.

  4. Pada menu Proyek, pilih Properti.

    Kotak dialog Halaman Properti CodeDefects ditampilkan.

  5. Pilih halaman properti Analisis Kode.

  6. Pilih kotak centang Aktifkan Analisis Kode pada Build . Pilih OK untuk menyimpan perubahan.

  7. Membangun kembali proyek CodeDefects.

    Peringatan analisis kode ditampilkan di jendela Daftar Kesalahan.

Untuk menganalisis peringatan cacat kode

  1. Pada menu Tampilan , pilih Daftar Kesalahan.

    Item menu ini mungkin tidak terlihat. Ini tergantung pada profil pengembang yang Anda pilih di Visual Studio. Anda mungkin harus menunjuk ke Windows Lain pada menu Tampilan, lalu pilih Daftar Kesalahan.

  2. Di jendela Daftar Kesalahan, klik dua kali peringatan berikut:

    C6230: Pemeran implisit antara jenis yang berbeda secara semantik: menggunakan HRESULT dalam konteks Boolean.

    Editor kode menampilkan baris yang menyebabkan peringatan di dalam fungsi bool ProcessDomain(). Peringatan ini menunjukkan bahwa sedang HRESULT digunakan dalam pernyataan 'jika' di mana hasil Boolean diharapkan. Ini biasanya kesalahan, karena ketika S_OK HRESULT dikembalikan dari fungsi yang menunjukkan keberhasilan, tetapi ketika dikonversi menjadi nilai boolean, HRESULT dievaluasi ke false.

  3. Koreksi peringatan ini dengan menggunakan SUCCEEDED makro, yang dikonversi menjadi ketika nilai pengembalian HRESULT menunjukkan keberhasilantrue. Kode Anda harus menyerupai kode berikut:

    if (SUCCEEDED(ReadUserAccount()))
    
  4. Di Daftar Kesalahan, klik dua kali peringatan berikut:

    C6282: Operator yang salah: penugasan konstanta dalam konteks Boolean. Pertimbangkan untuk menggunakan '==' sebagai gantinya.

  5. Koreksi peringatan ini dengan menguji kesetaraan. Kode Anda akan terlihat mirip dengan kode berikut:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Koreksi peringatan C6001 yang tersisa di Daftar Kesalahan dengan menginisialisasi i dan j menjadi 0.

  7. Membangun kembali proyek CodeDefects.

    Proyek dibangun tanpa peringatan atau kesalahan apa pun.

Peringatan anotasi kode sumber yang benar

Untuk mengaktifkan peringatan anotasi kode sumber dalam anotasi.c

  1. Di Penjelajah Solusi, pilih proyek Anotasi.

  2. Pada menu Proyek, pilih Properti.

    Kotak dialog Halaman Properti Anotasi ditampilkan.

  3. Pilih halaman properti Analisis Kode.

  4. Ubah properti Aktifkan Analisis Kode pada Build menjadi Ya. Pilih OK untuk menyimpan perubahan.

  1. Di Penjelajah Solusi, pilih proyek Anotasi.

  2. Pada menu Proyek, pilih Properti.

    Kotak dialog Halaman Properti Anotasi ditampilkan.

  3. Pilih halaman properti Analisis Kode.

  4. Pilih kotak centang Aktifkan Analisis Kode pada Build . Pilih OK untuk menyimpan perubahan.

Untuk memperbaiki peringatan anotasi kode sumber dalam anotasi.c

  1. Membangun kembali proyek Anotasi.

  2. Pada menu Build , pilih Jalankan Analisis Kode pada Anotasi.

  3. Di Daftar Kesalahan, klik dua kali peringatan berikut:

    C6011: Mendereferensikan penunjuk NULL 'newNode'.

    Peringatan ini menunjukkan kegagalan oleh pemanggil untuk memeriksa nilai yang dikembalikan. Dalam hal ini, panggilan ke AllocateNode mungkin mengembalikan nilai NULL. Lihat file header anotasis.h untuk deklarasi fungsi untuk AllocateNode.

  4. Kursor berada di lokasi dalam file annotations.cpp tempat peringatan terjadi.

  5. Untuk memperbaiki peringatan ini, gunakan pernyataan 'if' untuk menguji nilai pengembalian. Kode Anda harus menyerupai kode berikut:

    LinkedList* newNode = AllocateNode();
    if (nullptr != newNode)
    {
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    }
    
  6. Membangun kembali proyek Anotasi.

    Proyek dibangun tanpa peringatan atau kesalahan apa pun.

Gunakan anotasi kode sumber untuk menemukan lebih banyak masalah

Untuk menggunakan anotasi kode sumber

  1. Anotasi parameter formal dan nilai pengembalian fungsi AddTail untuk menunjukkan nilai penunjuk mungkin null:

    _Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
    
  2. Pada menu Build , pilih Jalankan Analisis Kode pada Solusi.

  3. Di Daftar Kesalahan, klik dua kali peringatan berikut:

    C6011: Dereferensi pointer NULL 'node'.

    Peringatan ini menunjukkan bahwa simpul yang diteruskan ke fungsi mungkin null.

  4. Untuk memperbaiki peringatan ini, gunakan pernyataan 'if' di awal fungsi untuk menguji nilai yang diteruskan. Kode Anda harus menyerupai kode berikut:

    if (nullptr == node)
    {
         return nullptr;
    }
    
  5. Pada menu Build , pilih Jalankan Analisis Kode pada Solusi.

    Proyek sekarang dibangun tanpa peringatan atau kesalahan.

Lihat juga

Panduan: Menganalisis Kode Terkelola untuk Cacat Kode
Analisis kode untuk C/C++