Aracılığıyla paylaş


/analyze (Kod analizi)

Kod analizini ve denetim seçeneklerini etkinleştirir.

Sözdizimi

Genel analiz seçenekleri:

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

Analiz eklentisi seçenekleri:

/analyze:plugin plugin_dll

Dış dosya çözümleme seçenekleri:

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

Çözümleme günlüğü seçenekleri:

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

Günlük dosyası biçimi seçenekleri:

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

Günlük dosyası içerik seçenekleri:

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

Kural kümesi seçenekleri:

/analyze:rulesetruleset_file

Kural kümesi seçenekleri:

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

Bağımsız değişkenler

Genel analiz seçenekleri

/analyze[-]
Kod analizini açar. Analizi açıkça kapatmak için kullanın /analyze- . /analyze- varsayılan davranıştır.

Varsayılan olarak, çözümleme çıkışı diğer hata iletileri gibi konsola veya Visual Studio Çıktı penceresine gider. Kod analizi, analiz edilen kaynak dosyanın adı olan filename adlı filename.nativecodeanalysis.xmlbir günlük dosyası da oluşturur.

/analyze:only
Varsayılan olarak, derleyici kod analizi çalışmadan önce nesne dosyaları oluşturmak için kodu derler. /analyze:only seçeneği, derleyicinin kod oluşturma geçişini atlar ve doğrudan kod analizi yapar. Derleyici hataları yine de kod analizinin çalışmasını engeller. Ancak, derleyici kod oluşturma geçişi sırasında bulabileceği diğer uyarıları raporlamaz. Program kod oluşturma uyarılarından arındırılmamışsa analiz sonuçları güvenilir olmayabilir. Bu seçeneği yalnızca kod, kod oluşturma söz dizimi denetimlerini hatasız veya uyarısız geçtiğinde kullanmanızı öneririz.

/analyze:quiet
Çözümleme çıkışını konsola veya Visual Studio Çıkış penceresine kapatır.

/analyze:max_paths number
parametresi analiz number etmek için en fazla kod yolu sayısını belirtir. Çözümleme varsayılan olarak 256 yoldur. Daha büyük değerler daha kapsamlı denetime neden olur, ancak analiz daha uzun sürebilir.

/analyze:stacksize number
parametresi, number C6262 uyarısını oluşturan yığın çerçevesinin bayt cinsinden boyutunu belirtir. Varsayılan yığın çerçevesi boyutu 16 KB'tır.

/analyze:WX-
Seçenek kullanıldığında bile /WX derleyiciye kod çözümleme uyarılarını hata olarak ele almaması gerektiğini bildirir. Daha fazla bilgi için bkz /WX . (Uyarı düzeyi).

Analiz eklentisi seçenekleri

/analyze:plugin plugin_dll
Kod analizi için belirtilen kod analizi eklenti DLL'sini etkinleştirir.

Yol çift tırnak (") gerektirmiyorsa, plugin_dll dosya yolu ile arasındaki /analyze:plugin boşluk isteğe bağlıdır. Örneğin, yazabilirsiniz /analyze:plugin EspxEngine.dll. Ancak, yol çift tırnak içine alınmışsa, ile dosya yolu arasında /analyze:plugin boşluk olamaz. Aşağıda bir örnek verilmiştir: /analyze:plugin"c:\path\to\EspxEngine.dll".

Kod çözümleme altyapısı, belirli hata kategorilerini bulmaya yardımcı olmak için eklentiler kullanır. Kod analizi altyapısı, çeşitli hataları algılayan bazı yerleşik eklentilerle birlikte gelir. Kod çözümleme altyapısıyla başka bir eklenti kullanmak için seçeneğini kullanarak /analyze:plugin bunu belirtin.

Eklenti LocalEspC.dll eşzamanlılık ile ilgili analiz denetimleri uygular. Bu denetimler C261XX aralığında C26100 ile C26167 arasında uyarı oluşturur.

yüklemek LocalEspC.dlliçin derleyici seçeneğini /analyze:plugin LocalEspC.dllkullanın.

Visual Studio ile birlikte gelen gibi EspXEngine.dllbazı eklentilerde daha fazla analiz yapabilen uzantılar kullanılabilecek. Visual Studio EspXEngine için şu uzantıları içerir: ConcurrencyCheck.dll, CppCoreCheck.dll, EnumIndex.dll, HResultCheck.dllve VariantClear.dll. Eşzamanlılık sorunları, CppCoreGuidelines ihlalleri, değerlerin enum dizinler, HRESULT değerler veya VARIANT değerler olarak uygunsuz kullanımları için hata olup olmadığını denetler.

Komut satırında derleme yaparken, EspXEngine uzantılarını belirtmek için ortam değişkenini kullanabilirsiniz Esp.Extensions . Örneğin:

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

Örnekte gösterildiği gibi uzantıları sınırlandırmak için noktalı virgül (;) kullanın. Sondaki noktalı virgül gerekli değildir. Bir uzantı için mutlak dosya yolu kullanabilir veya içeren EspXEngine.dlldizinden göreli bir yol belirtebilirsiniz.

Eklenti, EspXEngine.dll eşzamanlılık ile ilgili kod analizi denetimlerini uygulamak için kullanır ConcurrencyCheck.dll . Bu denetimler C261XX aralığında C26100 ile C26167 arasında uyarı oluşturur.

Geliştirici komut istemi penceresinde oluşturuyorsanız, önce uzantıyı Esp.Extensions belirtmek için ortam değişkenini ConcurrencyCheck.dll ayarlayın:

set Esp.Extensions=ConcurrencyCheck.dll

Ardından EspXEngine eklentisini kullanmak için derleyici seçeneğini /analyze:plugin EspXEngine.dll kullanın.

Dış dosya çözümleme seçenekleri

Visual Studio 2019 sürüm 16.10'dan başlayarak, dış üst bilgiler için farklı çözümleme kuralları ve davranışı belirtebilirsiniz. Dizinleri /external:I"dış" dizinler olarak belirtmek için , /external:envveya /external:anglebrackets seçeneklerini kullanın. Dış dizinden veya alt dizinlerinden kullanılarak #include eklenen tüm dosyalar dış üst bilgi olarak kabul edilir. Daha fazla bilgi için bkz /external . (Dış üst bilgi tanılamaları).

Kod analizi, dış dosyaların analizini denetlemek için şu seçenekleri sağlar:

/analyze:external-
Dış üst bilgi dosyalarının analizini atlar. Varsayılan olarak, kod analizi dış üst bilgi dosyalarını diğer dosyalar gibi analiz eder. /analyze:external- Seçenek ayarlandığında, kod analizi dış dosyalardan şablonlar dışında dış olarak belirtilen tüm dosyaları atlar. Dış üst bilgilerde tanımlanan şablonlar, seçeneği kullanılarak /external:templates- dış olmayan olarak değerlendirilir. bu /external:Wn seçenek kod analizini etkilemez. Örneğin, kod analizi dış dosyaları analiz eder ve belirtildiğinde /external:W0 bile hataları raporlar.

/analyze:external:ruleset ruleset_files
parametresi, ruleset_files dış dosyaların analizi için kullanılacak bir veya daha fazla noktalı virgülle ayrılmış kural kümesi dosyasını belirtir. Kural kümeleri hakkında bilgi için "Kural kümeleri için seçenekler" bölümüne bakın.

Ortam değişkeninde belirtilen dizinler altındaki dosyaların analizini atlamak için benzer ama daha basit bir özellik sağlayan bir ortam değişkeni (CAExcludePath) vardır. Bir dizin hem seçenekte hem de /external:* ortam değişkeninde CAExcludePath belirtilirse, bu dizin dışlanmış olarak kabul edilir ve /analyze:external* seçenekler bu dizine uygulanmaz.

Çözümleme günlüğü seçenekleri

/analyze:autolog[-]
Analiz edilen kaynak dosyaların her biri için çözümleme günlüğü dosyasının oluşturulmasını etkinleştirmek için bu bayrağın kullanılması gerekiyordu. Günlük dosyaları artık varsayılan olarak oluşturulduğu için bu bayrak çoğunlukla yedeklidir. Kullanıldığında, varsayılan günlük uzantısını .xmlyerine olarak *.pftlog değiştirir. Dosyalarda günlüğe kaydetmeyi devre dışı bırakmak için kullanın /analyze:autolog- .

/analyze:autolog:ext extension
Çözümleme günlüğü dosyalarının varsayılan uzantısını geçersiz kılar ve bunun yerine kullanır extension . Uzantıyı .sarif kullanırsanız, günlük dosyası varsayılan XML biçimi yerine SARIF biçimini kullanır.

/analyze:log log_path
Otomatik olarak oluşturulan günlük dosyası yolu log_path yerine bir günlük dosyası yolu belirtir. log_path Yolun sonunda ters eğik çizgi olduğunda ve var olan bir dizine başvurduğunda, kod analizi belirtilen dizindeki tüm günlük dosyalarını oluşturur. Aksi takdirde, log_path bir dosya yolu belirtir. Dosya yolu, derleyiciye tüm çözümlenen kaynak dosyaları için günlükleri belirtilen günlük dosyasında birleştirmesini yönlendirir. Dosya yolunun uzantısı .sarif varsa, günlük dosyası varsayılan XML biçimi yerine SARIF biçimini kullanır. seçeneğini kullanarak /analyze:log:format:* bu davranışı geçersiz kılabilirsiniz.

Günlük dosyası biçimi seçenekleri

Visual Studio 2019 sürüm 16.9'dan başlayarak, kod analizi için farklı günlük biçimi seçenekleri belirtebilirsiniz.

/analyze:log:format:xml
XML günlük biçiminin kullanılmasını kullanılan dosya uzantısının ilgisiz olarak zorlar.

/analyze:log:format:sarif
SARIF günlük biçiminin kullanılmasını kullanılan dosya uzantısının ilgisiz olarak zorlar.

Günlük dosyası içerik seçenekleri

Visual Studio 2019 sürüm 16.9'dan başlayarak, kod analizi için farklı günlük içeriği seçenekleri belirtebilirsiniz.

/analyze:sarif:analyzedfiles[-]
Uyarı göndermeyen çözümlenmiş dosyalar için SARIF günlük dosyasına dosya yapıtları girdileri ekler. Bu seçenek varsayılan olarak devre dışıdır. Kaynak dosya ve sonuçların yaydığı dosyalar için yapıtlar her zaman eklenir.

/analyze:sarif:configuration[-]
Kullanıcının varsayılan kural yapılandırmasını (varsayılan olarak devre dışı) nasıl aşdığını belirlemek için kural yapılandırma girdileri ekler.

/analyze:log:compilerwarnings
Hem çözümleme altyapısının bulduğu hataları hem de tüm derleyici uyarılarını analiz günlüğü dosyasına ekler. Varsayılan olarak, derleyici uyarıları çözümleme günlüğü dosyasına dahil değildir. Kod analizi sırasında derleyici uyarıları hakkında daha fazla bilgi için seçeneğine /analyze:only bakın.

/analyze:log:includesuppressed
Hem gizlenen uyarıları hem de desteklenmeyen uyarıları analiz günlüğü dosyasına ekler. Varsayılan olarak, gizlenen uyarılar analiz günlüğü dosyasına dahil değildir. Kural kümesi dosyaları analiz için belirtilirse, kural kümesi dosyaları tarafından devre dışı bırakılan uyarılar belirtildiğinde bile /analyze:log:includesuppressed günlüğe dahil değildir.

Kural kümesi seçenekleri

/analyze:projectdirectory project_directory
Geçerli proje dizinini belirtir. Kural kümesi (veya içerdiği bir öğe) bir dosya adıysa, derleyici dosyayı önce belirtilen project_directoryaltında arar. Bulunamazsa, daha sonra tarafından belirtilen /analyze:rulesetdirectoryöğesini (varsa) ararruleset_directories. Kural kümesi (veya içerdiği bir öğe) göreli bir yolsa, derleyici dosyayı önce proje dizininin altında arar. Kural kümesi bulunamazsa geçerli çalışma dizininde görünür. Bu seçenek Visual Studio 2019 sürüm 16.9'dan itibaren kullanılabilir.

/analyze:rulesetdirectory ruleset_directories
Kural kümesi arama yollarının noktalı virgülle ayrılmış listesini belirtir. Kural kümesi (veya içerdiği bir öğe) bir dosya adıysa, derleyici önce tarafından belirtilen /analyze:projectdirectoryaltında , varsa ve ardından belirtilen ruleset_directoriesöğesinin altında project_directory dosyayı arar. Bu seçenek Visual Studio 2019 sürüm 16.9'dan itibaren kullanılabilir.

/analyze:ruleset ruleset_files
Analiz için kullanılacak bir veya daha fazla kural kümesi dosyasını belirtir. Bu seçenek analizi daha verimli hale getirir; çözümleme altyapısı, çalıştırmadan önce kural kümesi dosyalarında etkin kuralları belirtilmemiş olan damacıları dışlamaya çalışır. Aksi takdirde, altyapı tüm damacıları etkinleştirir.

/analyze:ruleset ruleset_file
Analiz için kullanılacak bir kural kümesi dosyası belirtir. Bu seçenek analizi daha verimli hale getirir; çözümleme altyapısı, çalıştırmadan önce kural kümesi dosyasında etkin kuralları belirtilmemiş olan damacıları dışlamaya çalışır. Aksi takdirde, altyapı tüm damacıları etkinleştirir.

Visual Studio ile birlikte gelen kural kümesi dosyaları içinde %VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Setsbulunur.

Aşağıdaki örnek özel kural kümesi, analiz altyapısına C6001 ve C26494 olup olmadığını denetlemesini ve bunları uyarı olarak raporlamasını söyler.

Bağımsız değişkende tam yolu belirttiğiniz sürece bu dosyayı herhangi bir yere yerleştirebilirsiniz.

Bağımsız değişkende tam yolu belirttiğiniz sürece veya veya /analyze:rulesetdirectory seçeneklerinde belirtilen /analyze:projectdirectory dizinlerin altına bu dosyayı herhangi bir yere yerleştirebilirsiniz.

<?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>

Varsayılan olarak, kural kümesi dosyalarının dosya uzantısıdır *.ruleset. Visual Studio, kural kümesi dosyalarına göz atarken varsayılan uzantıyı kullanır. Ancak, herhangi bir uzantıyı kullanabilirsiniz.

Kural kümeleri hakkında daha fazla bilgi için bkz . Çalıştırılacak C++ kurallarını belirtmek için kural kümelerini kullanma.

Açıklamalar

Daha fazla bilgi için bkz . C/C++ için kod analizine genel bakış ve C/C++ uyarıları için kod analizi.

Bu derleyici seçeneğini Visual Studio geliştirme ortamında ayarlamak için

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>Kod Analizi>Genel özellik sayfasını seçin.

  3. Kod Analizi özelliklerinden birini veya daha fazlasını değiştirin.

  4. Değişikliklerinizi kaydetmek için Tamam'ı veya Uygula'yı seçin.

Visual Studio 2019 sürüm 16.10 ve sonraki sürümlerde dış dosya çözümleme seçeneklerini ayarlamak için:

  1. Projenin Özellik Sayfaları iletişim kutusunu açın.

  2. Yapılandırma Özellikleri>C/C++>Dış İçerir özellik sayfasını seçin.

  3. Özellikleri ayarla:

    • Dış Üst Bilgiler için Kod Analizini /analyze:external- Devre Dışı Bırak seçeneği ayarlar.

    • Dış Üst Bilgiler için Çözümleme Kural Kümesi seçeneği ayarlar /analyze:external:ruleset path .

  4. Değişikliklerinizi kaydetmek için Tamam'ı veya Uygula'yı seçin.

Bu derleyici seçeneğini program üzerinden ayarlamak için

  1. Bkz. EnablePREfast.

Ayrıca bkz.

MSVC derleyici seçenekleri
MSVC derleyicisi komut satırı söz dizimi