/fsanitize-coverage
(Konfigurowanie pokrycia sanitizera)
Opcje /fsanitize-coverage
kompilatora instruują kompilator, aby dodać różne rodzaje punktów instrumentacji, w których są wywoływane funkcje zdefiniowane przez użytkownika. Te opcje są przydatne w przypadku scenariuszy rozmytych, które używają /fsanitize=fuzzer
metody , takiej jak OneFuzz. Aby uzyskać więcej informacji, zobacz dokumentację oneFuzz i projekt OneFuzz w witrynie GitHub.
Składnia
/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
Uwagi
Opcje kompilatora eksperymentalnego /fsanitize-coverage
oferują obsługę pokrycia kodu i różne opcje modyfikowania generowanej instrumentacji dostarczonej przez kompilator. Wszystkie te opcje są ustawiane automatycznie po określeniu /fsanitize=fuzzer
opcji. Opcja /fsanitize=fuzzer
wymaga tych samych punktów instrumentacji i wywołań zwrotnych wymienionych w tych opcjach.
Opcje /fsanitize-coverage
nie zezwalają na składnię rozdzielaną przecinkami, na przykład: /fsanitize-coverage=edge,inline-8bit-counters,trace-cmp,trace-div
. Określ te opcje indywidualnie.
Dostępne /fsanitize-coverage
są opcje począwszy od programu Visual Studio 2022 w wersji 17.0.
Pokrycie kodu
Opcja /fsanitize-coverage=edge
kompilatora umożliwia instrumentację pokrycia kodu wzdłuż wszystkich nie nadmiarowych krawędzi. Użyj /fno-sanitize-coverage=edge
polecenia , aby wyłączyć tę opcję, jeśli została już podana lub dorozumiana przez inną opcję.
Wbudowane liczniki
Opcja /fsanitize-coverage=inline-8bit-counters
kompilatora nakazuje kompilatorowi dodanie przyrostu licznika wbudowanego na każdej odpowiedniej krawędzi. Ta opcja dodaje również wywołanie, do extern "C" void __sanitizer_cov_8bit_counters_init(uint8_t *start, uint8_t *stop)
którego należy zaimplementować. Argumenty odpowiadają początkowemu i końcowemu tablicy zawierającej wszystkie utworzone liczniki 8-bitowe. Użyj /fno-sanitize-coverage=inline-8bit-counters
polecenia , aby wyłączyć tę opcję, jeśli została już podana lub dorozumiana przez inną opcję.
Porównania śledzenia
Opcja /fsanitize-coverage=trace-cmp
kompilatora nakazuje kompilatorowi wstawianie wywołań do następujących funkcji:
// 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);
Użyj /fno-sanitize-coverage=trace-cmp
polecenia , aby wyłączyć tę opcję, jeśli została już podana lub dorozumiana przez inną opcję.
Podziały śledzenia
Opcja /fsanitize-coverage=trace-div
kompilatora nakazuje kompilatorowi wstawianie wywołań do następujących funkcji:
// Before a division instruction of the stated size.
void __sanitizer_cov_trace_div4(uint32_t Val);
void __sanitizer_cov_trace_div8(uint64_t Val);
Użyj /fno-sanitize-coverage=trace-div
polecenia , aby wyłączyć tę opcję, jeśli została już podana lub dorozumiana przez inną opcję.
Aby ustawić zaawansowane opcje kompilatora
Otwórz okno dialogowe Strony właściwości projektu.
Wybierz stronę Właściwości>konfiguracji C/C++>Wiersza polecenia.
Zmodyfikuj właściwość Opcje dodatkowe, aby ustawić opcje /fsanitize-coverage.
Wybierz przycisk OK lub Zastosuj , aby zapisać zmiany.
Zobacz też
Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC
/fsanitize
(Włącz narzędzia sanitizer)
Dokumentacja języka i kompilacji narzędzia AddressSanitizer