/fsanitize-coverage
(設定清理器涵蓋範圍)
編譯程式 /fsanitize-coverage
選項會指示編譯程式新增呼叫使用者定義函式的各種檢測點。 這些選項適用於使用 /fsanitize=fuzzer
的模糊案例,例如 OneFuzz。 如需詳細資訊,請參閱 OneFuzz 檔和 OneFuzz GitHub 專案。
語法
/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
備註
實驗 /fsanitize-coverage
性編譯程式選項提供程式碼涵蓋範圍支援,以及各種選項,以修改產生的編譯程式提供的檢測。 當指定選項時 /fsanitize=fuzzer
,系統會自動設定所有這些選項。 選項 /fsanitize=fuzzer
需要這些選項中提及的相同檢測點和回呼。
/fsanitize-coverage
選項不允許以逗號分隔的語法,例如:/fsanitize-coverage=edge,inline-8bit-counters,trace-cmp,trace-div
。 個別指定這些選項。
選項 /fsanitize-coverage
可從 Visual Studio 2022 17.0 版開始提供。
程式碼涵蓋範圍
編譯 /fsanitize-coverage=edge
程式選項會啟用所有非備援邊緣的程式代碼涵蓋範圍檢測。 如果已由其他選項提供或隱含此選項,請使用 /fno-sanitize-coverage=edge
停用此選項。
內嵌計數器
編譯 /fsanitize-coverage=inline-8bit-counters
程式選項會指示編譯程式在每個相關邊緣上加入內嵌計數器遞增。 這個選項也會新增您必須實作的呼叫 extern "C" void __sanitizer_cov_8bit_counters_init(uint8_t *start, uint8_t *stop)
。 自變數會對應至陣列的開頭和結尾,其中包含建立的所有8位計數器。 如果已由其他選項提供或隱含此選項,請使用 /fno-sanitize-coverage=inline-8bit-counters
停用此選項。
追蹤比較
編譯 /fsanitize-coverage=trace-cmp
程式選項會指示編譯程式插入對下列函式的呼叫:
// 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);
如果已由其他選項提供或隱含此選項,請使用 /fno-sanitize-coverage=trace-cmp
停用此選項。
追蹤分割
編譯 /fsanitize-coverage=trace-div
程式選項會指示編譯程式插入對下列函式的呼叫:
// Before a division instruction of the stated size.
void __sanitizer_cov_trace_div4(uint32_t Val);
void __sanitizer_cov_trace_div8(uint64_t Val);
如果已由其他選項提供或隱含此選項,請使用 /fno-sanitize-coverage=trace-div
停用此選項。
設定進階編譯程序選項
開啟專案的 [屬性頁] 對話框。
選取 [組態屬性]>[C/C++]>[命令列] 屬性頁。
修改 [其他選項] 屬性以設定 /fsanitize-coverage 選項。
選擇 [確定] 或 [套用] 以儲存變更。
另請參閱
MSVC 編譯器選項
MSVC 編譯器命令列語法
/fsanitize
(啟用消毒器)
AddressSanitizer 組建和語言參考