Bagikan melalui


/analyze (Analisis kode)

Mengaktifkan analisis kode dan opsi kontrol.

Sintaks

Opsi analisis umum:

/analyze[-]
/analyze:only
/analyze:quiet
/analyze:max_paths number
/analyze:stacksize number
/analyze:WX-

Opsi plugin analisis:

/analyze:plugin plugin_dll

Opsi analisis file eksternal:

/analyze:external-
/analyze:external:ruleset ruleset_files

Opsi log analisis:

/analyze:autolog[-]
/analyze:autolog:ext extension
/analyze:log log_path

Opsi format file log:

/analyze:log:format:sarif
/analyze:log:format:xml

Opsi konten file log:

/analyze:sarif:analyzedfiles[-]
/analyze:sarif:configuration[-]
/analyze:log:compilerwarnings
/analyze:log:includesuppressed

Opsi ruleset:

/analyze:rulesetruleset_file

Opsi ruleset:

/analyze:projectdirectory project_directory
/analyze:rulesetdirectory ruleset_directories
/analyze:ruleset ruleset_files

Argumen

Opsi analisis umum

/analyze[-]
Mengaktifkan analisis kode. Gunakan /analyze- untuk menonaktifkan analisis secara eksplisit. /analyze- adalah perilaku default.

Secara default, output analisis masuk ke konsol atau jendela Output Visual Studio seperti pesan kesalahan lainnya. Analisis kode juga membuat file log bernama filename.nativecodeanalysis.xml, di mana filename adalah nama file sumber yang dianalisis.

/analyze:only
Secara default, pengkompilasi mengkompilasi kode untuk menghasilkan file objek sebelum analisis kode berjalan. Opsi ini /analyze:only membuat pengkompilasi melewati pass pembuatan kode, dan melakukan analisis kode secara langsung. Kesalahan pengkompilasi masih mencegah analisis kode berjalan. Namun, pengkompilasi tidak akan melaporkan peringatan lain yang mungkin ditemukan selama pembuatan kode lulus. Jika program tidak bebas dari peringatan pembuatan kode, hasil analisis mungkin tidak dapat diandalkan. Sebaiknya gunakan opsi ini hanya jika kode melewati pemeriksaan sintaks pembuatan kode tanpa kesalahan atau peringatan.

/analyze:quiet
Menonaktifkan output analisis ke konsol atau jendela Output Visual Studio.

/analyze:max_paths number
Parameter number menentukan jumlah maksimum jalur kode yang akan dianalisis. Analisis default ke 256 jalur. Nilai yang lebih besar menyebabkan pemeriksaan yang lebih menyeluruh, tetapi analisis mungkin memakan waktu lebih lama.

/analyze:stacksize number
Parameter number menentukan ukuran dalam byte bingkai tumpukan yang menghasilkan peringatan C6262. Ukuran bingkai tumpukan default adalah 16KB.

/analyze:WX-
Memberi tahu pengkompilasi untuk tidak memperlakukan peringatan analisis kode sebagai kesalahan bahkan ketika /WX opsi digunakan. Untuk informasi selengkapnya, lihat /WX (Tingkat peringatan).

Opsi plugin analisis

/analyze:plugin plugin_dll
Mengaktifkan DLL plug-in analisis kode yang ditentukan untuk analisis kode.

Spasi antara /analyze:plugin dan plugin_dll jalur file bersifat opsional jika jalur tidak memerlukan tanda kutip ganda ("). Misalnya, Anda dapat menulis /analyze:plugin EspxEngine.dll. Namun, jika jalur diapit dalam tanda kutip ganda, Anda tidak dapat memiliki spasi antara /analyze:plugin dan jalur file. Berikut adalah contohnya: /analyze:plugin"c:\path\to\EspxEngine.dll".

Mesin analisis kode menggunakan plug-in untuk membantu menemukan kategori cacat tertentu. Mesin analisis kode dilengkapi dengan beberapa plug-in bawaan yang mendeteksi berbagai cacat. Untuk menggunakan plug-in lain dengan mesin analisis kode, tentukan dengan menggunakan /analyze:plugin opsi .

Plug-in LocalEspC.dll menerapkan pemeriksaan analisis terkait konkurensi. Pemeriksaan ini meningkatkan peringatan dalam rentang C261XX, seperti C26100 hingga C26167.

Untuk memuat LocalEspC.dll, gunakan opsi /analyze:plugin LocalEspC.dllpengkompilasi .

Beberapa plug-in, seperti EspXEngine.dll, yang dikirim dengan Visual Studio, menggunakan ekstensi yang dapat melakukan analisis lebih lanjut. Visual Studio mencakup ekstensi ini untuk EspXEngine: ConcurrencyCheck.dll, , CppCoreCheck.dll, EnumIndex.dllHResultCheck.dll, dan VariantClear.dll. Mereka memeriksa cacat untuk masalah konkurensi, pelanggaran CppCoreGuidelines, penggunaan enum nilai yang tidak tepat sebagai indeks, HRESULT nilai, atau VARIANT nilai, masing-masing.

Saat Anda membangun pada baris perintah, Anda dapat menggunakan Esp.Extensions variabel lingkungan untuk menentukan ekstensi EspXEngine. Contohnya:

set Esp.Extensions=ConcurrencyCheck.dll;CppCoreCheck.dll;

Gunakan titik koma (;) untuk memisahkan ekstensi, seperti yang ditunjukkan dalam contoh. Titik koma berikutnya tidak diperlukan. Anda dapat menggunakan jalur file absolut untuk ekstensi, atau menentukan jalur relatif dari direktori yang berisi EspXEngine.dll.

EspXEngine.dll Plug-in menggunakan ConcurrencyCheck.dll untuk menerapkan pemeriksaan analisis kode terkait konkurensi. Pemeriksaan ini meningkatkan peringatan dalam rentang C261XX, seperti C26100 hingga C26167.

Jika Anda membangun di jendela prompt perintah pengembang, pertama-tama atur Esp.Extensions variabel lingkungan untuk menentukan ConcurrencyCheck.dll ekstensi:

set Esp.Extensions=ConcurrencyCheck.dll

Kemudian, gunakan opsi /analyze:plugin EspXEngine.dll compiler untuk menggunakan plug-in EspXEngine.

Opsi analisis file eksternal

Mulai visual Studio 2019 versi 16.10, Anda dapat menentukan aturan analisis dan perilaku yang berbeda untuk header eksternal. /external:IGunakan opsi , /external:env, atau /external:anglebrackets untuk menentukan direktori sebagai direktori "eksternal". File apa pun yang disertakan dengan menggunakan #includedari direktori eksternal atau subdirektorinya dianggap sebagai header eksternal. Untuk informasi selengkapnya, lihat /external (Diagnostik header eksternal).

Analisis kode menyediakan opsi ini untuk mengontrol analisis file eksternal:

/analyze:external-
Melompati analisis file header eksternal. Secara default, analisis kode menganalisis file header eksternal sama seperti file lainnya. /analyze:external- Saat opsi diatur, analisis kode melewati file apa pun yang ditentukan sebagai eksternal, kecuali templat dari file eksternal. Templat yang ditentukan dalam header eksternal diperlakukan sebagai non-eksternal dengan menggunakan /external:templates- opsi . Opsi /external:Wn ini tidak memengaruhi analisis kode. Misalnya, analisis kode menganalisis file eksternal dan melaporkan cacat bahkan ketika /external:W0 ditentukan.

/analyze:external:ruleset ruleset_files
Parameter ruleset_files menentukan satu atau beberapa file ruleset yang dibatasi titik koma untuk digunakan untuk analisis file eksternal. Untuk informasi tentang ruleset, lihat bagian "Opsi untuk rulesets".

Ada variabel lingkungan (CAExcludePath) yang menyediakan kemampuan serupa tetapi lebih sederhana untuk melewati analisis file di bawah direktori yang ditentukan dalam variabel lingkungan. Jika direktori ditentukan dalam /external:* opsi dan dalam variabel lingkungan, direktori dianggap sebagai dikecualikan, dan /analyze:external* opsi tidak akan berlaku untuk direktori tersebutCAExcludePath.

Opsi log analisis

/analyze:autolog[-]
Bendera ini digunakan untuk mengaktifkan pembuatan file log analisis untuk setiap file sumber yang sedang dianalisis. File log sekarang dibuat secara default, sehingga bendera ini sebagian besar berlebihan. Saat digunakan, ini mengubah ekstensi log default menjadi *.pftlog alih-alih .xml. Gunakan /analyze:autolog- untuk menonaktifkan pengelogan ke file.

/analyze:autolog:ext extension
Mengambil alih ekstensi default file log analisis, dan menggunakan extension sebagai gantinya. Jika Anda menggunakan .sarif ekstensi, file log menggunakan format SARIF alih-alih format XML default.

/analyze:log log_path
Menentukan jalur log_path file log alih-alih jalur file log yang dihasilkan secara otomatis. log_path Ketika jalur memiliki garis miring terbelakang dan mengacu pada direktori yang ada, analisis kode membuat semua file log di direktori yang ditentukan. Jika tidak, log_path menentukan jalur file. Jalur file menginstruksikan pengompilasi untuk menggabungkan log untuk semua file sumber yang dianalisis ke dalam file log yang ditentukan. Jika jalur file memiliki .sarif ekstensi, file log menggunakan format SARIF alih-alih format XML default. Anda dapat mengambil alih perilaku ini dengan menggunakan opsi /analyze:log:format:* ini.

Opsi format file log

Mulai dari Visual Studio 2019 versi 16.9, Anda dapat menentukan opsi format log yang berbeda untuk analisis kode.

/analyze:log:format:xml
Memaksa penggunaan format log XML tidak relevan dengan ekstensi file yang digunakan.

/analyze:log:format:sarif
Memaksa penggunaan format log SARIF tidak relevan dengan ekstensi file yang digunakan.

Opsi konten file log

Mulai dari Visual Studio 2019 versi 16.9, Anda dapat menentukan opsi konten log yang berbeda untuk analisis kode.

/analyze:sarif:analyzedfiles[-]
Menambahkan entri artefak file ke file log SARIF untuk file yang dianalisis yang tidak mengeluarkan peringatan. Pemadatan dinonaktifkan secara default. Artefak untuk file sumber dan untuk file yang memancarkan hasil selalu disertakan.

/analyze:sarif:configuration[-]
Menambahkan entri konfigurasi aturan untuk menentukan bagaimana pengguna mengesampingkan konfigurasi aturan default (dinonaktifkan secara default).

/analyze:log:compilerwarnings
Menambahkan cacat apa pun yang ditemukan mesin analisis, dan semua peringatan kompilator, ke file log analisis. Secara default, peringatan kompilator tidak disertakan dalam file log analisis. Untuk informasi selengkapnya tentang peringatan pengkompilasi selama analisis kode, lihat /analyze:only opsi .

/analyze:log:includesuppressed
Menambahkan peringatan yang ditekan dan peringatan yang tidak tertekan ke file log analisis. Secara default, peringatan yang disembunyikan tidak disertakan dalam file log analisis. Jika file ruleset ditentukan untuk analisis, peringatan yang dinonaktifkan oleh file ruleset tidak disertakan dalam log bahkan ketika /analyze:log:includesuppressed ditentukan.

Opsi ruleset

/analyze:projectdirectory project_directory
Menentukan direktori proyek saat ini. Jika set aturan (atau item yang disertakan) adalah nama file, pengkompilasi terlebih dahulu mencari file di bawah yang ditentukan project_directory. Jika tidak ditemukan, selanjutnya mencari yang ruleset_directories ditentukan oleh /analyze:rulesetdirectory, jika ada. Jika set aturan (atau item yang disertakan) adalah jalur relatif, pengkompilasi terlebih dahulu mencari file di bawah direktori proyek. Jika set aturan tidak ditemukan, maka akan terlihat di direktori kerja saat ini. Opsi ini tersedia mulai dari Visual Studio 2019 versi 16.9.

/analyze:rulesetdirectory ruleset_directories
Menentukan daftar jalur pencarian ruleset yang dipisahkan titik koma. Jika set aturan (atau item yang disertakan) adalah nama file, maka pengkompilasi terlebih dahulu mencari file di bawah project_directory yang ditentukan oleh /analyze:projectdirectory, jika ada, diikuti oleh yang ditentukan ruleset_directories. Opsi ini tersedia mulai dari Visual Studio 2019 versi 16.9.

/analyze:ruleset ruleset_files
Menentukan satu atau beberapa file ruleset yang akan digunakan untuk analisis. Opsi ini dapat membuat analisis lebih efisien; mesin analisis mencoba mengecualikan pemeriksa yang tidak memiliki aturan aktif yang ditentukan dalam file ruleset sebelum berjalan. Jika tidak, mesin menjalankan semua pemeriksa yang diaktifkan.

/analyze:ruleset ruleset_file
Menentukan file ruleset yang akan digunakan untuk analisis. Opsi ini dapat membuat analisis lebih efisien; mesin analisis mencoba mengecualikan pemeriksa yang tidak memiliki aturan aktif yang ditentukan dalam file ruleset sebelum berjalan. Jika tidak, mesin menjalankan semua pemeriksa yang diaktifkan.

File ruleset yang dikirim dengan Visual Studio ditemukan di %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets.

Contoh set aturan kustom berikut memberi tahu mesin analisis untuk memeriksa C6001 dan C26494, dan melaporkannya sebagai peringatan.

Anda dapat menempatkan file ini di mana saja selama Anda menentukan jalur lengkap dalam argumen.

Anda dapat menempatkan file ini di mana saja selama Anda menentukan jalur lengkap dalam argumen, atau di bawah direktori yang ditentukan dalam /analyze:projectdirectory opsi atau /analyze:rulesetdirectory .

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description="New rules to apply." ToolsVersion="15.0">
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C6001" Action="Warning" />
    <Rule Id="C26494" Action="Warning" />
  </Rules>
</RuleSet>

Secara default, ekstensi file untuk file ruleset adalah *.ruleset. Visual Studio menggunakan ekstensi default saat menelusuri file ruleset. Namun, Anda dapat menggunakan ekstensi apa pun.

Untuk informasi selengkapnya tentang aturan, lihat Menggunakan seperangkat aturan untuk menentukan aturan C++ yang akan dijalankan.

Keterangan

Untuk informasi selengkapnya, lihat Analisis kode untuk ringkasan C/C++ dan Analisis kode untuk peringatan C/C++.

Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio

  1. Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.

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

  3. Ubah satu atau beberapa properti Analisis Kode.

  4. Pilih OK atau Terapkan untuk menyimpan perubahan Anda.

Untuk mengatur opsi analisis file eksternal di Visual Studio 2019 versi 16.10 dan yang lebih baru:

  1. Buka kotak dialog Halaman Properti proyek.

  2. Pilih halaman properti Properti>Konfigurasi C/C++>External Includes.

  3. Atur properti:

    • Nonaktifkan Analisis Kode untuk Header Eksternal mengatur /analyze:external- opsi .

    • Aturan Analisis untuk Header Eksternal mengatur /analyze:external:ruleset path opsi .

  4. Pilih OK atau Terapkan untuk menyimpan perubahan Anda.

Untuk mengatur opsi pengkompilasi ini secara terprogram

  1. Lihat EnablePREfast.

Lihat juga

Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC