Bagikan melalui


Menggunakan pemeriksa Pedoman Inti C++

Pedoman Inti C++ adalah serangkaian pedoman, aturan, dan praktik terbaik portabel tentang pengkodan di C++ yang dibuat oleh pakar dan desainer C++. Visual Studio saat ini mendukung subset aturan ini sebagai bagian dari alat analisis kodenya untuk C++. Pemeriksa panduan inti diinstal secara default di Visual Studio 2017 dan Visual Studio 2019. Mereka tersedia sebagai paket NuGet untuk Visual Studio 2015.

Proyek Pedoman Inti C++

Dibuat oleh Bjarne Stroustrup dan lainnya, Panduan Inti C++ adalah panduan untuk menggunakan C++ modern dengan aman dan efektif. Panduan ini menekankan keamanan jenis statis dan keamanan sumber daya. Mereka mengidentifikasi cara untuk menghilangkan atau meminimalkan bagian bahasa yang paling rentan kesalahan. Mereka juga menyarankan cara membuat kode Anda lebih sederhana, lebih dapat diandalkan, dan memiliki performa yang lebih baik. Pedoman ini dikelola oleh Standard C++ Foundation. Untuk mempelajari selengkapnya, lihat dokumentasi, C++ Pedoman Inti, dan mengakses file proyek dokumentasi Panduan Inti C++ di GitHub.

Mengaktifkan panduan C++ Core Check dalam Analisis Kode

Subset aturan C++ Core Check disertakan dalam seperangkat aturan Microsoft Native Recommended. Ini adalah set aturan yang berjalan secara default saat analisis kode diaktifkan.

Untuk mengaktifkan analisis kode pada proyek Anda

  1. Buka dialog Halaman Properti untuk proyek Anda.

  2. Pilih halaman properti Analisis Kode Properti>Konfigurasi.

  3. Pilih kotak centang Aktifkan Analisis Kode pada Build .

Property page for Code Analysis General settings.

Untuk mengaktifkan aturan Pemeriksaan Inti lainnya, buka daftar dropdown dan pilih seperangkat aturan mana yang ingin Anda sertakan:

Dropdown for additional C++ Core Check rule sets.

Subset aturan C++ Core Check disertakan dalam seperangkat aturan Microsoft Native Recommended. Ini adalah set aturan yang berjalan secara default saat analisis kode Microsoft diaktifkan.

Untuk mengaktifkan analisis kode pada proyek Anda:

  1. Buka dialog Halaman Properti untuk proyek Anda.

  2. Pilih halaman properti Analisis Kode Properti>Konfigurasi.

  3. Atur properti Aktifkan Analisis Kode pada Build dan Aktifkan Analisis Kode Microsoft.

Anda juga dapat memilih untuk menjalankan semua aturan Pemeriksaan Inti C++ yang didukung, atau memilih subset Anda sendiri untuk dijalankan:

Untuk mengaktifkan lebih banyak aturan Pemeriksaan Inti

  1. Buka dialog Halaman Properti untuk proyek Anda.

  2. Pilih halaman properti Microsoft Analisis>Kode Properti>Konfigurasi.

  3. Buka daftar dropdown Aturan Aktif dan pilih Pilih beberapa seperangkat aturan.

  4. Dalam dialog Tambahkan atau Hapus Seperangkat Aturan, pilih seperangkat aturan mana yang ingin Anda sertakan.

Contoh

Berikut adalah contoh beberapa masalah yang dapat ditemukan oleh aturan C++ Core Check:

// CoreCheckExample.cpp
// Add CppCoreCheck package and enable code analysis in build for warnings.

int main()
{
    int arr[10];           // warning C26494
    int* p = arr;          // warning C26485

    [[gsl::suppress(bounds.1)]] // This attribute suppresses Bounds rule #1
    {
        int* q = p + 1;    // warning C26481 (suppressed)
        p = q++;           // warning C26481 (suppressed)
    }

    return 0;
}

Contoh ini menunjukkan beberapa peringatan yang dapat ditemukan oleh aturan C++ Core Check:

  • C26494 adalah aturan Type.5: Selalu menginisialisasi objek.

  • C26485 adalah aturan Bounds.3: Tidak ada decay array-to-pointer.

  • C26481 adalah aturan Bounds.1: Jangan gunakan aritmatika pointer. Gunakan span sebagai gantinya.

Instal dan aktifkan aturan analisis kode C++ Core Check, lalu kompilasi kode ini. Analisis kode menghasilkan dua peringatan pertama, dan menekan yang ketiga. Berikut adalah output build dari kode contoh di Visual Studio 2015:

1>------ Build started: Project: CoreCheckExample, Configuration: Debug Win32 ------
1>  CoreCheckExample.cpp
1>  CoreCheckExample.vcxproj -> C:\Users\username\documents\visual studio 2015\Projects\CoreCheckExample\Debug\CoreCheckExample.exe
1>  CoreCheckExample.vcxproj -> C:\Users\username\documents\visual studio 2015\Projects\CoreCheckExample\Debug\CoreCheckExample.pdb (Full PDB)
c:\users\username\documents\visual studio 2015\projects\corecheckexample\corecheckexample\corecheckexample.cpp(6): warning C26494: Variable 'arr' is uninitialized. Always initialize an object. (type.5: http://go.microsoft.com/fwlink/p/?LinkID=620421)
c:\users\username\documents\visual studio 2015\projects\corecheckexample\corecheckexample\corecheckexample.cpp(7): warning C26485: Expression 'arr': No array to pointer decay. (bounds.3: http://go.microsoft.com/fwlink/p/?LinkID=620415)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Panduan Inti C++ ada untuk membantu Anda menulis kode yang lebih baik dan lebih aman. Namun, Anda mungkin menemukan instans di mana aturan atau profil tidak boleh diterapkan. Sangat mudah untuk menekannya langsung dalam kode. Anda dapat menggunakan [[gsl::suppress]] atribut untuk mencegah C++ Core Check mendeteksi dan melaporkan pelanggaran aturan di blok kode berikut. Anda dapat menandai pernyataan individual untuk menekan aturan tertentu. Anda bahkan dapat menekan seluruh profil batas dengan menulis [[gsl::suppress(bounds)]] tanpa menyertakan nomor aturan tertentu.

Seperangkat aturan yang didukung

Saat aturan baru ditambahkan ke Pemeriksa Pedoman Inti C++, jumlah peringatan yang dihasilkan untuk kode yang sudah ada sebelumnya mungkin meningkat. Anda dapat menggunakan seperangkat aturan yang telah ditentukan sebelumnya untuk memfilter jenis aturan mana yang akan diaktifkan. Anda akan menemukan artikel referensi untuk sebagian besar aturan di bawah Referensi Pemeriksaan Inti Visual Studio C++.

15.3 Aturan ini pertama kali muncul di Visual Studio 2017 versi 15.3
15.5 Aturan ini pertama kali muncul di Visual Studio 2017 versi 15.5
15.6 Aturan ini pertama kali muncul di Visual Studio 2017 versi 15.6
15.7 Aturan ini pertama kali muncul di Visual Studio 2017 versi 15.7
16.0 Aturan ini pertama kali muncul di Visual Studio 2019 versi 16.0
16.3 Aturan ini pertama kali muncul di Visual Studio 2019 versi 16.3

Anda dapat memilih untuk membatasi peringatan hanya untuk satu atau beberapa grup. Seperangkat aturan Minimum asli dan Native Recommended mencakup aturan C++ Core Check dan pemeriksaan PREfast lainnya.

Untuk melihat seperangkat aturan yang tersedia, buka dialog Properti Proyek. Dalam kotak dialog Halaman Properti, pilih halaman properti Umum Analisis>Kode Properti>Konfigurasi. Kemudian, buka menu dropdown di kotak kombo Seperangkat Aturan untuk melihat seperangkat aturan yang tersedia. Untuk membuat kombinasi kustom seperangkat aturan, pilih Pilih beberapa seperangkat aturan. Dialog Tambahkan atau Hapus Seperangkat Aturan mencantumkan aturan yang bisa Anda pilih. Untuk informasi selengkapnya tentang menggunakan Seperangkat Aturan di Visual Studio, lihat Menggunakan seperangkat aturan untuk menentukan aturan C++ yang akan dijalankan.

Untuk melihat seperangkat aturan yang tersedia, buka dialog Properti Proyek. Dalam kotak dialog Halaman Properti, pilih halaman properti Microsoft Analisis> Kode Properti>Konfigurasi. Kemudian, buka menu dropdown di kotak kombo Aturan Aktif untuk melihat seperangkat aturan yang tersedia. Untuk membuat kombinasi kustom seperangkat aturan, pilih Pilih beberapa seperangkat aturan. Dialog Tambahkan atau Hapus Seperangkat Aturan mencantumkan aturan yang bisa Anda pilih. Untuk informasi selengkapnya tentang menggunakan Seperangkat Aturan di Visual Studio, lihat Menggunakan seperangkat aturan untuk menentukan aturan C++ yang akan dijalankan.

Makro

Pemeriksa Pedoman Inti C++ dilengkapi dengan file header, yang menentukan makro yang memudahkan untuk menekan seluruh kategori peringatan dalam kode:

ALL_CPPCORECHECK_WARNINGS
CPPCORECHECK_TYPE_WARNINGS
CPPCORECHECK_RAW_POINTER_WARNINGS
CPPCORECHECK_CONST_WARNINGS
CPPCORECHECK_OWNER_POINTER_WARNINGS
CPPCORECHECK_UNIQUE_POINTER_WARNINGS
CPPCORECHECK_BOUNDS_WARNINGS

Makro ini sesuai dengan seperangkat aturan dan diperluas ke daftar nomor peringatan yang dipisahkan spasi. Dengan menggunakan konstruksi pragma yang sesuai, Anda dapat mengonfigurasi serangkaian aturan efektif yang menarik untuk proyek atau bagian kode. Dalam contoh berikut, analisis kode hanya memperingatkan tentang pengubah konstan yang hilang:

#include <CppCoreCheck\Warnings.h>
#pragma warning(disable: ALL_CPPCORECHECK_WARNINGS)
#pragma warning(default: CPPCORECHECK_CONST_WARNINGS)

Atribut

Pengkompilasi Microsoft C++ memiliki dukungan terbatas untuk atribut .[[gsl::suppress]] Ini dapat digunakan untuk menekan peringatan pada pernyataan ekspresi dan blok di dalam fungsi.

// Suppress only warnings from the 'r.11' rule in expression.
[[gsl::suppress(r.11)]] new int;

// Suppress all warnings from the 'r' rule group (resource management) in block.
[[gsl::suppress(r)]]
{
    new int;
}

// Suppress only one specific warning number.
// For declarations, you might need to use the surrounding block.
// Macros are not expanded inside of attributes.
// Use plain numbers instead of macros from the warnings.h.
[[gsl::suppress(26400)]]
{
    int *p = new int;
}

Menekan analisis dengan menggunakan opsi baris perintah

Alih-alih #pragmas, Anda dapat menggunakan opsi baris perintah di halaman properti file untuk menekan peringatan untuk proyek atau satu file. Misalnya, untuk menonaktifkan peringatan C26400 untuk file:

  1. Klik kanan file di Penjelajah Solusi dan pilih Properti.

  2. Dalam kotak dialog Halaman Properti, pilih halaman properti Properti>Konfigurasi C/C++>Baris Perintah.

  3. Dalam kotak edit Opsi Tambahan, tambahkan /wd26400.

Anda dapat menggunakan opsi baris perintah untuk menonaktifkan sementara semua analisis kode untuk file dengan menentukan /analyze-. Anda akan melihat peringatan D9025 mengesampingkan '/analyze' dengan '/analyze-', yang mengingatkan Anda untuk mengaktifkan kembali analisis kode nanti.

Mengaktifkan Pemeriksa Pedoman Inti C++ pada file proyek tertentu

Terkadang berguna untuk melakukan analisis kode yang berfokus dan masih menggunakan Visual Studio IDE. Coba skenario sampel berikut untuk proyek besar. Ini dapat menghemat waktu build dan memudahkan untuk memfilter hasil:

  1. Di shell perintah, atur esp.extension variabel lingkungan.

  2. Untuk mewarisi variabel ini, buka Visual Studio dari shell perintah.

  3. Muat proyek Anda dan buka propertinya.

  4. Aktifkan analisis kode, pilih seperangkat aturan yang sesuai, tetapi jangan aktifkan ekstensi analisis kode.

  5. Buka file yang ingin Anda analisis dengan Pemeriksa Pedoman Inti C++ dan buka propertinya.

  6. Pilih Properti>Konfigurasi C/C++>Opsi Tambahan Baris>Perintah dan tambahkan/analyze:plugin EspXEngine.dll

  7. Nonaktifkan penggunaan header yang telah dikommpilasikan sebelumnya (Properti>Konfigurasi C/C++>Header yang Telah Dikompresi). Hal ini diperlukan karena mesin ekstensi mungkin mencoba membaca informasi internalnya dari header yang telah dikommpilasikan (PCH). Jika PCH dikompilasi dengan opsi proyek default, PCH tidak akan kompatibel.

  8. Membangun kembali proyek. Pemeriksaan PREFast umum harus berjalan pada semua file. Karena Pemeriksa Pedoman Inti C++ tidak diaktifkan secara default, pemeriksa hanya boleh berjalan pada file yang dikonfigurasi untuk menggunakannya.

Cara menggunakan Pemeriksa Pedoman Inti C++ di luar Visual Studio

Anda dapat menggunakan pemeriksaan Pedoman Inti C++ di build otomatis.

MSBuild

Pemeriksa Analisis Kode Asli (PREfast) diintegrasikan ke dalam lingkungan MSBuild oleh file target kustom. Anda dapat menggunakan properti proyek untuk mengaktifkannya, dan menambahkan C++ Core Guidelines Checker (yang didasarkan pada PREfast):

  <PropertyGroup>
    <EnableCppCoreCheck>true</EnableCppCoreCheck>
    <CodeAnalysisRuleSet>CppCoreCheckRules.ruleset</CodeAnalysisRuleSet>
    <RunCodeAnalysis>true</RunCodeAnalysis>
  </PropertyGroup>

Pastikan Anda menambahkan properti ini sebelum mengimpor Microsoft.Cpp.targets file. Anda dapat memilih seperangkat aturan tertentu atau membuat seperangkat aturan kustom. Atau, gunakan seperangkat aturan default yang menyertakan pemeriksaan PREfast lainnya.

Anda hanya dapat menjalankan C++ Core Checker pada file tertentu. Gunakan pendekatan yang sama seperti yang dijelaskan sebelumnya, tetapi gunakan file MSBuild. Variabel lingkungan dapat diatur dengan menggunakan BuildMacro item :

<ItemGroup>
    <BuildMacro Include="Esp_Extensions">
      <EnvironmentVariable>true</EnvironmentVariable>
      <Value>CppCoreCheck.dll</Value>
    </BuildMacro>
</ItemGroup>

Jika Anda tidak ingin mengubah file proyek, Anda dapat meneruskan properti pada baris perintah:

msbuild /p:EnableCppCoreCheck=true /p:RunCodeAnalysis=true /p:CodeAnalysisRuleSet=CppCoreCheckRules.ruleset ...

Proyek Non-MSBuild

Jika Anda menggunakan sistem build yang tidak mengandalkan MSBuild, Anda masih dapat menjalankan pemeriksa. Untuk menggunakannya, Anda perlu membiasakan diri dengan beberapa internal konfigurasi mesin Analisis Kode. Kami tidak menjamin dukungan untuk internal ini di versi Visual Studio yang akan datang.

Analisis Kode memerlukan beberapa variabel lingkungan dan opsi baris perintah pengkompilasi. Sebaiknya gunakan lingkungan Prompt Perintah Alat Asli sehingga Anda tidak perlu mencari jalur tertentu untuk pengkompilasi, menyertakan direktori, dan sebagainya.

  • Variabel lingkungan

    • set esp.extensions=cppcorecheck.dll Ini memberi tahu mesin untuk memuat modul Pedoman Inti C++.
    • Karena Visual Studio 2019, kami tidak lagi merekomendasikan pengaturan esp.annotationbuildlevel variabel lingkungan karena pengaturan dapat mengakibatkan positif palsu. Jika melihat hasil yang tidak terduga, hapus variabel ini dari lingkungan Anda.
    • set caexcludepath=%include% Kami sangat menyarankan Agar Anda menonaktifkan peringatan yang diaktifkan pada header standar. Anda dapat menambahkan lebih banyak jalur di sini, misalnya jalur ke header umum dalam proyek Anda.
  • Opsi baris perintah

    • /analyze Mengaktifkan analisis kode (pertimbangkan juga menggunakan /analyze:only dan /analyze:quiet).
    • /analyze:plugin EspXEngine.dll Opsi ini memuat mesin Ekstensi Analisis Kode ke PREfast. Mesin ini, pada gilirannya, memuat Pemeriksa Pedoman Inti C++.

Menggunakan Pustaka Dukungan Pedoman

Pustaka Dukungan Pedoman (GSL) dirancang untuk membantu Anda mengikuti Panduan Inti. GSL mencakup definisi yang memungkinkan Anda mengganti konstruksi yang rawan kesalahan dengan alternatif yang lebih aman. Misalnya, Anda dapat mengganti sepasang T*, length parameter dengan jenisnya span<T> . Proyek GSL tersedia di GitHub di https://github.com/Microsoft/GSL. Pustaka adalah sumber terbuka, sehingga Anda dapat melihat sumber, membuat komentar, atau berkontribusi. Anda juga dapat menggunakan manajer paket vcpkg untuk mengunduh dan menginstal pustaka secara lokal.

Gunakan panduan C++ Core Check di proyek Visual Studio 2015

Jika Anda menggunakan Visual Studio 2015, kumpulan aturan analisis kode C++ Core Check tidak diinstal secara default. Langkah lain diperlukan sebelum Anda dapat mengaktifkan alat analisis kode C++ Core Check di Visual Studio 2015. Microsoft menyediakan dukungan untuk proyek Visual Studio 2015 dengan menggunakan paket NuGet. Paket ini bernama Microsoft.CppCoreCheck, dan tersedia di http://www.nuget.org/packages/Microsoft.CppCoreCheck. Paket ini mengharuskan Anda memiliki setidaknya Visual Studio 2015 dengan Pembaruan 1 terinstal.

Paket ini juga menginstal paket lain sebagai dependensi, Pustaka Dukungan Pedoman (GSL) khusus header. GSL juga tersedia di GitHub di https://github.com/Microsoft/GSL.

Karena cara aturan analisis kode dimuat dalam Visual Studio 2015, Anda harus menginstal Microsoft.CppCoreCheck paket NuGet ke setiap proyek C++ yang ingin Anda periksa.

Untuk menambahkan paket Microsoft.CppCoreCheck ke proyek Anda di Visual Studio 2015

  1. Di Penjelajah Solusi, klik kanan untuk membuka menu konteks proyek Anda dalam solusi yang ingin Anda tambahkan paketnya. Pilih Kelola Paket NuGet untuk membuka Pengelola Paket NuGet.

  2. Di jendela Manajer Paket NuGet, cari Microsoft.CppCoreCheck.

    Nuget Package Manager window showing the CppCoreCheck package.

  3. Pilih paket Microsoft.CppCoreCheck lalu pilih tombol Instal untuk menambahkan aturan ke proyek Anda.

    Paket NuGet menambahkan file MSBuild .targets ke proyek Anda yang dipanggil saat Anda mengaktifkan analisis kode pada proyek Anda. File .targets menambahkan aturan C++ Core Check sebagai ekstensi lain ke alat analisis Visual Studio Code. Saat paket diinstal, Anda dapat menggunakan dialog Halaman Properti untuk mengaktifkan atau menonaktifkan aturan yang dirilis dan eksperimental.

Baca juga