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
Buka solusi CppDemo di Visual Studio.
Solusi CppDemo sekarang mengisi Penjelajah Solusi.
Pada menu Build, pilih Build ulang Solusi.
Solusi dibangun tanpa kesalahan atau peringatan.
Di Penjelajah Solusi, pilih proyek CodeDefects.
Pada menu Proyek, pilih Properti.
Kotak dialog Halaman Properti CodeDefects ditampilkan.
Pilih halaman properti Analisis Kode.
Ubah properti Aktifkan Analisis Kode pada Build menjadi Ya. Pilih OK untuk menyimpan perubahan.
Membangun kembali proyek CodeDefects.
Peringatan analisis kode ditampilkan di jendela Daftar Kesalahan.
Buka solusi CppDemo di Visual Studio.
Solusi CppDemo sekarang mengisi Penjelajah Solusi.
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.Di Penjelajah Solusi, pilih proyek CodeDefects.
Pada menu Proyek, pilih Properti.
Kotak dialog Halaman Properti CodeDefects ditampilkan.
Pilih halaman properti Analisis Kode.
Pilih kotak centang Aktifkan Analisis Kode pada Build . Pilih OK untuk menyimpan perubahan.
Membangun kembali proyek CodeDefects.
Peringatan analisis kode ditampilkan di jendela Daftar Kesalahan.
Untuk menganalisis peringatan cacat kode
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.
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 sedangHRESULT
digunakan dalam pernyataan 'jika' di mana hasil Boolean diharapkan. Ini biasanya kesalahan, karena ketikaS_OK
HRESULT dikembalikan dari fungsi yang menunjukkan keberhasilan, tetapi ketika dikonversi menjadi nilai boolean, HRESULT dievaluasi kefalse
.Koreksi peringatan ini dengan menggunakan
SUCCEEDED
makro, yang dikonversi menjadi ketika nilai pengembalianHRESULT
menunjukkan keberhasilantrue
. Kode Anda harus menyerupai kode berikut:if (SUCCEEDED(ReadUserAccount()))
Di Daftar Kesalahan, klik dua kali peringatan berikut:
C6282: Operator yang salah: penugasan konstanta dalam konteks Boolean. Pertimbangkan untuk menggunakan '==' sebagai gantinya.
Koreksi peringatan ini dengan menguji kesetaraan. Kode Anda akan terlihat mirip dengan kode berikut:
if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
Koreksi peringatan C6001 yang tersisa di Daftar Kesalahan dengan menginisialisasi
i
danj
menjadi 0.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
Di Penjelajah Solusi, pilih proyek Anotasi.
Pada menu Proyek, pilih Properti.
Kotak dialog Halaman Properti Anotasi ditampilkan.
Pilih halaman properti Analisis Kode.
Ubah properti Aktifkan Analisis Kode pada Build menjadi Ya. Pilih OK untuk menyimpan perubahan.
Di Penjelajah Solusi, pilih proyek Anotasi.
Pada menu Proyek, pilih Properti.
Kotak dialog Halaman Properti Anotasi ditampilkan.
Pilih halaman properti Analisis Kode.
Pilih kotak centang Aktifkan Analisis Kode pada Build . Pilih OK untuk menyimpan perubahan.
Untuk memperbaiki peringatan anotasi kode sumber dalam anotasi.c
Membangun kembali proyek Anotasi.
Pada menu Build , pilih Jalankan Analisis Kode pada Anotasi.
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 untukAllocateNode
.Kursor berada di lokasi dalam file annotations.cpp tempat peringatan terjadi.
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; }
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
Anotasi parameter formal dan nilai pengembalian fungsi
AddTail
untuk menunjukkan nilai penunjuk mungkin null:_Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
Pada menu Build , pilih Jalankan Analisis Kode pada Solusi.
Di Daftar Kesalahan, klik dua kali peringatan berikut:
C6011: Dereferensi pointer NULL 'node'.
Peringatan ini menunjukkan bahwa simpul yang diteruskan ke fungsi mungkin null.
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; }
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++