目录一常见消毒器二核心原理三基本用法1CMakeLists2编译方法3环境变量4屏蔽配置文件一常见消毒器ASAN检测内存越界等问题TSAN检测数据竞争等问题UBSAN检测数值运算类问题二核心原理基于运行时检测对内存进行精准监控发现问题会打印告警日志包括调用栈、线程、锁等关键信息。所以有时会遇到一些难点有些概率性问题必须复现了才能打出告警三基本用法1CMakeListsASAN基本配置option(ENABLE_ASAN Enable AddressSanitizer OFF) if(ENABLE_ASAN) add_compile_options(-fsanitizeaddress -fno-omit-frame-pointer) add_link_options(-fsanitizeaddress) endif()TSAN基本配置option(ENABLE_TSAN Enable ThreadSanitizer OFF) if(ENABLE_TSAN) add_compile_options( -fsanitizethread -fno-omit-frame-pointer ) add_link_options(-fsanitizethread) endif()2编译方法mkdir build cd buildcmake .. -DENABLE_TSANON 或者 cmake .. -DENABLE_ASANONcmake --build . -j8注意切换版本普通版ASAN版TSAN版时最好整个build删掉重建避免干扰。3环境变量执行 export TSAN_OPTIONS环境变量内容然后直接运行可执行文件配置的环境变量即可生效。例如export TSAN_OPTIONSabort_on_error1:halt_on_error1:suppressionstsan_suppressions.txt:log_pathtsan.log其中abort_on_error和halt_on_error是控制一直运行还是产生告警立刻abortsuppressions是用于指定屏蔽配置文件log_path是用于指定告警输出位置。4屏蔽配置文件有很多种用法最常见的问题就是日志相关代码产生大量data race类型的tsan告警干扰阅读可以在屏蔽配置文件里面加一行形如race:Log.h
地址消毒器
目录一常见消毒器二核心原理三基本用法1CMakeLists2编译方法3环境变量4屏蔽配置文件一常见消毒器ASAN检测内存越界等问题TSAN检测数据竞争等问题UBSAN检测数值运算类问题二核心原理基于运行时检测对内存进行精准监控发现问题会打印告警日志包括调用栈、线程、锁等关键信息。所以有时会遇到一些难点有些概率性问题必须复现了才能打出告警三基本用法1CMakeListsASAN基本配置option(ENABLE_ASAN Enable AddressSanitizer OFF) if(ENABLE_ASAN) add_compile_options(-fsanitizeaddress -fno-omit-frame-pointer) add_link_options(-fsanitizeaddress) endif()TSAN基本配置option(ENABLE_TSAN Enable ThreadSanitizer OFF) if(ENABLE_TSAN) add_compile_options( -fsanitizethread -fno-omit-frame-pointer ) add_link_options(-fsanitizethread) endif()2编译方法mkdir build cd buildcmake .. -DENABLE_TSANON 或者 cmake .. -DENABLE_ASANONcmake --build . -j8注意切换版本普通版ASAN版TSAN版时最好整个build删掉重建避免干扰。3环境变量执行 export TSAN_OPTIONS环境变量内容然后直接运行可执行文件配置的环境变量即可生效。例如export TSAN_OPTIONSabort_on_error1:halt_on_error1:suppressionstsan_suppressions.txt:log_pathtsan.log其中abort_on_error和halt_on_error是控制一直运行还是产生告警立刻abortsuppressions是用于指定屏蔽配置文件log_path是用于指定告警输出位置。4屏蔽配置文件有很多种用法最常见的问题就是日志相关代码产生大量data race类型的tsan告警干扰阅读可以在屏蔽配置文件里面加一行形如race:Log.h