VS2019中使用ThreadSanitizer未生成检测结果文件问题求助
问题根因
你存在两个核心错误:
- 参数配置位置完全错误
配置属性->调试->命令参数下填写的内容是程序启动时传递给程序自身的入参,不会作用于编译、链接阶段。你用的-fsanitize=thread等参数属于编译链接期参数,放在这里没有任何作用。 - 编译器不匹配对应参数
-fsanitize=thread是GCC、Clang编译器专属的线程消毒器(TSan)参数,VS2019默认使用的MSVC编译器原生不支持该参数,即便你把参数放到正确的编译配置项,也会直接报编译错误。
可行解决方案
方案1:使用VS自带的线程检测工具(适配默认MSVC工具集)
不需要修改编译参数,直接在顶部菜单栏选择 调试->性能探测器,勾选「线程验证」选项后启动程序,即可自动检测数据竞争、死锁、线程同步错误等常见线程问题,检测结果会直接在VS界面中展示。
方案2:使用Clang工具集搭配TSan
如果你坚持要使用ThreadSanitizer做检测,操作步骤如下:
- 先在VS Installer中安装「C++ Clang 编译器 for Windows」组件
- 打开项目属性页,在 配置属性->常规->平台工具集 中选择
LLVM (clang-cl) - 切换到 配置属性->C/C++->所有选项->附加选项,添加参数
-fsanitize=thread -g - 切换到 配置属性->链接器->所有选项->附加选项,添加参数
-fsanitize=thread -pie - 编译架构必须选择
x64,TSan不支持32位Windows程序 - 运行生成的程序时,检测结果默认输出到标准错误流,需要保存结果可以手动执行重定向:
你的程序名.exe 2> tsan检测报告.txt
内容的提问来源于stack exchange,提问作者David Hovsepyan
相关产品推荐
相关产品推荐

