为什么地址清理了C ++库的构建会在libcxx类中产生不可重现的ASAN问题?

时间:2016-10-20 21:18:40

标签: c++ libc++ address-sanitizer

使用-fsanitize = address构建时,我有时会发现libc ++类的内存访问问题。

错误在逐个运行中似乎不可重复,有时根本不会发生。

发生了什么事?我该如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

“如果libc ++容器从已检测(使用ASan重建)转换为非检测代码,则Address Sanitizer可能会报告容器溢出误报。”

如果您的程序链接到使用没有ASAN的libc ++构建的库,那么您需要在构建时定义_LIBCXX_HAS_NO_ASAN

请参阅Why does Xcode define _LIBCPP_HAS_NO_ASAN when creating an address-sanitized build?