/fsanitize-coverage (Konfigurace pokrytí sanitizátorem)

Možnosti /fsanitize-coverage kompilátoru dávají kompilátoru pokyn, aby přidal různé druhy instrumentačních bodů, kde se volají uživatelem definované funkce. Tyto možnosti jsou užitečné pro scénáře přibližných shod, které používají /fsanitize=fuzzer, jako je OneFuzz. Další informace najdete v dokumentaci k OneFuzzu a projektu OneFuzz Na GitHubu.

Syntaxe

/fsanitize-coverage=edge
/fsanitize-coverage=inline-8bit-counters
/fsanitize-coverage=trace-cmp
/fsanitize-coverage=trace-div
/fno-sanitize-coverage=edge
/fno-sanitize-coverage=inline-8bit-counters
/fno-sanitize-coverage=trace-cmp
/fno-sanitize-coverage=trace-div

Poznámky

Možnosti experimentálního /fsanitize-coverage kompilátoru nabízejí podporu pokrytí kódu a různé možnosti pro úpravu instrumentace poskytované kompilátorem. Všechny tyto možnosti se automaticky nastaví při /fsanitize=fuzzer zadání možnosti. Tato /fsanitize=fuzzer možnost vyžaduje stejné instrumentační body a zpětná volání uvedená v těchto možnostech.

Možnosti /fsanitize-coverage neumožňují syntaxi oddělenou čárkami, například: /fsanitize-coverage=edge,inline-8bit-counters,trace-cmp,trace-div. Tyto možnosti zadejte jednotlivě.

Možnosti /fsanitize-coverage jsou dostupné od sady Visual Studio 2022 verze 17.0.

Pokrytí kódu

Možnost /fsanitize-coverage=edge kompilátoru umožňuje instrumentaci pokrytí kódu podél všech ne redundantních hran. Tuto možnost můžete /fno-sanitize-coverage=edge zakázat, pokud už je k dispozici nebo odvozena jinou možností.

Vložené čítače

Možnost /fsanitize-coverage=inline-8bit-counters kompilátoru dává kompilátoru pokyn, aby na každý relevantní okraj přidal vložený čítač. Tato možnost také přidá volání extern "C" void __sanitizer_cov_8bit_counters_init(uint8_t *start, uint8_t *stop) , které musíte implementovat. Argumenty odpovídají začátku a konci pole, které obsahuje všechny 8bitové čítače vytvořené. Tuto možnost můžete /fno-sanitize-coverage=inline-8bit-counters zakázat, pokud už je k dispozici nebo odvozena jinou možností.

Porovnání trasování

Možnost /fsanitize-coverage=trace-cmp kompilátoru dává kompilátoru pokyn, aby vkládaly volání do následujících funkcí:

// Before each comparison instruction of the stated size.
void __sanitizer_cov_trace_cmp1(uint8_t Arg1, uint8_t Arg2);
void __sanitizer_cov_trace_cmp2(uint16_t Arg1, uint16_t Arg2);
void __sanitizer_cov_trace_cmp4(uint32_t Arg1, uint32_t Arg2);
void __sanitizer_cov_trace_cmp8(uint64_t Arg1, uint64_t Arg2);

// Before each comparison instruction of the stated size, if one of the operands (Arg1) is constant.
void __sanitizer_cov_trace_const_cmp1(uint8_t Arg1, uint8_t Arg2);
void __sanitizer_cov_trace_const_cmp2(uint16_t Arg1, uint16_t Arg2);
void __sanitizer_cov_trace_const_cmp4(uint32_t Arg1, uint32_t Arg2);
void __sanitizer_cov_trace_const_cmp8(uint64_t Arg1, uint64_t Arg2);

Tuto možnost můžete /fno-sanitize-coverage=trace-cmp zakázat, pokud už je k dispozici nebo odvozena jinou možností.

Trasování divizí

Možnost /fsanitize-coverage=trace-div kompilátoru dává kompilátoru pokyn, aby vkládaly volání do následujících funkcí:

// Before a division instruction of the stated size.
void __sanitizer_cov_trace_div4(uint32_t Val);
void __sanitizer_cov_trace_div8(uint64_t Val);

Tuto možnost můžete /fno-sanitize-coverage=trace-div zakázat, pokud už je k dispozici nebo odvozena jinou možností.

Nastavení pokročilých možností kompilátoru

  1. Otevřete dialogové okno Stránky vlastností projektu.

  2. Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.

  3. Upravte vlastnost Další možnosti a nastavte možnosti /fsanitize-coverage.

  4. Změny uložíte kliknutím na OK nebo Použít .

Viz také

Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC
/fsanitize (Povolení sanitizátorů)
Referenční dokumentace k sestavení a jazyku AddressSanitizer