如何用泄漏消毒剂找到内存泄漏的原因

时间:2017-10-05 00:07:53

标签: c++ memory-leaks address-sanitizer

我有一个使用tbb的C ++程序,我正在使用GCC 6.2.1在64位Linux上编译。 当我使用地址清理程序(-fsanitize = address)进行编译并运行单元测试时,会生成此输出:

{{1}}

在关闭优化(-O0)和-fno-omit-frame-pointer的情况下编译代码。我怎样才能获得有关泄漏的更多信息?

1 个答案:

答案 0 :(得分:3)

泄漏发生在一个系统库中,该系统库可能是在没有-fno-omit-frame-pointer的情况下编译的,因此Asan无法使用帧指针解开它。您可以尝试使用缓慢但更强大的DWARF开卷器来设置

# Or LSAN_OPTIONS, if you use standalone LSan
export ASAN_OPTIONS=fast_unwind_on_malloc=0

有关运行时标志的更多详细信息,请参阅herehere

BTW你可以要求LSan不要通过

中止错误
# Or LSAN_OPTIONS, if you use standalone LSan
export ASAN_OPTIONS=exitcode=0:...