Memulai dengan Analyzer Statis PVS-Studio untuk Visual C ++

Gambar 8

Pada artikel ini, saya akan memberi tahu Anda tentang PVS-Studio, alat analisis untuk kode C dan C ++, dan menunjukkan kepada Anda cara menggunakannya di lingkungan Visual C ++. Panduan ini secara khusus ditujukan untuk pengguna pemula.

Memasang penganalisis


PVS-Studio mendukung Microsoft Visual Studio 2019, 2017, 2015, 2013, 2012, dan 2010. Lihat dokumentasi untuk persyaratan sistem. Saat ini, PVS-Studio dapat menganalisis proyek yang ditulis dalam C, C ++, C #, dan Java. Namun, artikel ini berfokus pada pemrogram yang bekerja di Visual C ++ dan mencari bantuan untuk memulai dengan penganalisa.

Paket instalasi dapat diunduh di sini . Setelah menjalankannya, Anda akan ditawari sejumlah opsi integrasi (Gambar 1) untuk dipilih. Opsi yang tidak tersedia diklik.

Gambar 1. Jendela pemilihan komponen integrasi.

Gambar 1. Jendela pemilihan komponen integrasi.

Setelah Anda menginstal PVS-Studio, buka jendela Tentang Visual Studio dan pastikan penganalisis hadir di antara produk yang diinstal.

Memeriksa proyek


Setelah instalasi selesai, Anda dapat melanjutkan untuk memeriksa proyek Anda. Anda juga dapat mencoba menganalisis seluruh solusi. Untuk melakukan itu, klik Ekstensi → PVS-Studio → Periksa → Solusi (Gambar 2).

Gambar 2. Memeriksa solusi dengan PVS-Studio.

Gambar 2. Memeriksa solusi dengan PVS-Studio.

Jika Anda mengalami kesulitan menjalankan pemeriksaan, lihat bagian " PVS-Studio: Pemecahan Masalah " di situs web kami. Itu bukan petunjuk bodoh seperti "pastikan steker dicolokkan ke stopkontak". Bagian ini menjelaskan masalah khas yang dilaporkan pengguna kami dan cara untuk menyelesaikannya.

Menangani daftar peringatan


Setelah pemeriksaan selesai, pesan diagnostik akan muncul di jendela khusus. Jendela ini memiliki banyak elemen, yang semuanya berfungsi untuk memanipulasi daftar sehingga Anda hanya dapat melihat peringatan yang menarik. Pada awalnya, bagaimanapun, mungkin terlihat agak rumit.

Gambar 3. Jendela peringatan. Klik pada gambar untuk memperbesar.

Gambar 3. Jendela peringatan. Klik pada gambar untuk memperbesar.

Gambaran lengkap elemen jendela dapat ditemukan dalam dokumentasi , tetapi sekarang kita akan fokus hanya pada yang dasar:

  1. Tingkat kepastian peringatan. Tangkapan layar di atas menunjukkan level menengah dan tinggi diaktifkan. Tingkat rendah lebih banyak berurusan dengan "Bau Kode" dan peringatan yang, sayangnya, cenderung menghasilkan terlalu banyak kesalahan positif. Mengapa ada begitu banyak peringatan tingkat rendah dan menengah tetapi sangat sedikit peringatan tingkat tinggi? Jawabannya adalah bahwa diagnostik MISRA telah diaktifkan, yang berisi aturan seperti "fungsi seharusnya hanya memiliki satu titik keluar". Tentu saja, Anda biasanya tidak memerlukan diagnostik ini, sehingga dinonaktifkan secara default. Catatan: " Bagaimana cara cepat memeriksa peringatan menarik yang diberikan oleh alat analisa PVS-Studio untuk kode C dan C ++? ".
  2. Filter. Anda dapat memfilter pesan berdasarkan kode, CWE, teks, proyek, atau file.
  3. Jumlah garis pemicu. Beberapa diagnostik dapat merujuk ke sejumlah baris: peringatan semacam itu memiliki elips di sebelah nomor baris.

SAST


PVS-Studio adalah alat untuk pengujian keamanan aplikasi statis (SAST), yang berarti dapat mendeteksi kerentanan potensial dalam kode sumber dan menunjukkan pengidentifikasi kelemahan yang sesuai berdasarkan klasifikasi tertentu.

PVS-Studio mendukung klasifikasi kelemahan berikut:

  1. CWE
  2. CERT SEI
  3. Misra

Untuk mengaktifkan kode CWE, buka menu drop-down jendela penganalisis dan kemudian centang Show Columns> CWE

Gambar 4. Mengaktifkan kode CWE dari menu drop-down.

Gambar 4. Mengaktifkan kode CWE dari menu drop-down.

Cara lain untuk melakukannya adalah Ekstensi> PVS-Studio> Tampilkan Kode CWE di Jendela Output pada bilah menu Visual Studio

Gambar 5. Submenu PVS-Studio di menu Extensions.

Gambar 5. Submenu PVS-Studio di menu Extensions.

Tidak seperti itu, diagnostik MISRA diaktifkan di jendela opsi:

Gambar 6. Daftar kelemahan yang terdeteksi.

Gambar 6. Daftar kelemahan yang terdeteksi.

Anda dapat mempelajari lebih lanjut tentang klasifikasi ini di sini .

Memeriksa proyek dari baris perintah


PVS-Studio_Cmd.exe adalah utilitas untuk memeriksa proyek C ++ .vcxproj dan solusi dari baris perintah. Ini dapat berguna jika Anda ingin mengotomatiskan proses analisis. Program ini dapat ditemukan di direktori instalasi, yaitu 'C: \ Program Files (x86) \ PVS-Studio' secara default.

Utilitas ini memiliki beberapa parameter , tetapi Anda hanya perlu tiga untuk memulai:
  • --target: file proyek atau solusi yang akan diperiksa.
  • --output: file plog untuk menyimpan laporan analisis.
  • --progress: melacak kemajuan analisis.

Ini yang akan Anda lihat setelah memulai pemeriksaan:

Gambar 7. Output dari utilitas PVS-Studio_Cmd.exe

Gambar 7. Output dari utilitas PVS-Studio_Cmd.exe

Setelah pemeriksaan selesai, file plog yang berisi laporan analisis akan dibuat di direktori yang ditentukan dalam parameter mulai. Laporan ini dapat dikonversi ke format lain menggunakan utilitas PlogConverter.exe, dan jika Anda ingin membuka laporan di IDE, cukup klik dua kali pada file plog di Windows Explorer.

File laporan juga dapat dibuka dari menu Extensions: Extensions> PVS-Studio> Open / Save> Open Analysis Report ...

Gambar 8. Membuka laporan analisis dari menu plugin.

Gambar 8. Membuka laporan analisis dari menu plugin.

Lihat dokumentasi untuk perincian tentang utilitas dan parameternya.

Menekan positif palsu


Alat analisis menyediakan berbagai cara untuk menekan positif palsu. Mereka dijelaskan secara rinci di bagian berikut:


Contoh peringatan


Mari kita lihat contoh peringatan yang dikeluarkan oleh penganalisa. Cuplikan kode berikut diambil dari proyek ReactOS:

VOID NTAPI AtapiDmaInit(....) { .... ULONG treg = 0x54 + (dev < 3) ? (dev << 1) : 7; .... } 

Pesan diagnostik PVS-Studio: V502 Mungkin operator '?:' Bekerja dengan cara yang berbeda dari yang diharapkan. Operator '?:' Memiliki prioritas lebih rendah daripada operator '+'. uniata id_dma.cpp 1610

Ekspresi 0x54 + (dev <3) akan selalu bernilai true : konstanta non-nol 0x54 pertama kali ditambahkan ke hasil dari ekspresi (dev <3) , yang dapat mengevaluasi 0 atau 1, dan hanya kemudian adalah nilai yang dihasilkan dibandingkan dengan nol.

Seperti inilah versi yang benar:

 VOID NTAPI AtapiDmaInit(....) { .... ULONG treg = 0x54 + ((dev < 3) ? (dev << 1) : 7); .... } 

Kami telah memecahkan masalah dengan melampirkan Operasi '?:' Dalam tanda kurung sehingga hasilnya sekarang akan bergantung pada hasil dari ekspresi (dev <3) .

Kesimpulan


Itu adalah pengantar singkat untuk memulai dengan PVS-Studio untuk Visual C ++. Itu tidak mencakup semua aspek, tentu saja, jadi selamat datang di blog kami, di mana kami menjelaskan secara rinci cara bekerja dengan penganalisa, dan lihat dokumentasi untuk deskripsi lengkap dari pesan diagnostik dan pengaturan alat.

Source: https://habr.com/ru/post/id461007/


All Articles