Clang 有许多清理程序,可以在运行时检查可疑行为。不幸的是,它们不能一次全部启用。
不能在同一程序中组合多个
-fsanitize=address,
-fsanitize=thread
, 和检查器。-fsanitize=memory
更糟糕的是,这三个似乎都太有用了,不能忽略。AddressSanitizer 检查内存错误,ThreadSanitizer 检查竞争条件,MemorySanitizer 检查未初始化的读取。 我担心所有这些事情!
显然,如果我预知虫子在哪里,我可以据此选择消毒剂。但如果我不这样做呢?更进一步,如果我想将消毒剂用作预防工具而不是诊断工具,以指出我什至不知道的错误怎么办?
换句话说,鉴于我没有特别寻找任何东西,默认情况下我应该使用哪种 sanitizer 进行编译? 我是否只希望编译和测试整个程序三次,每种消毒剂一次?