/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
。 分别指定这些选项。
从 Visual Studio 2022 版本 17.0 开始,可以使用 /fsanitize-coverage
选项。
代码覆盖率
/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 生成和语言参考