gpt4 book ai didi

c++ - 我可以将 c++ sanitizer 仅应用于我的程序部分而不是第三方库吗

转载 作者:行者123 更新时间:2023-12-01 14:05:58 25 4
gpt4 key购买 nike

我有一个使用 thrift/jemalloc 的项目,我想使用 C++ sanitizer 来查找内存泄漏。该项目从源头构建 Thrift 。

当我添加 -fsanitize=address -fno-omit-frame-pointer对于全局 CXX 标志,编译器会提示 thrift 的许多错误并停止进一步编译。 (下面的一个例子)。我在自己的代码中看不到任何错误。

Indirect leak of 168 byte(s) in 1 object(s) allocated from:
#0 0x7f62c7e8bc3b in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/liblsan.so.0+0xfc3b)
#1 0x56164a1712be in yyparse() /tmp/tmp.BnUAMaceSS/cmake-build-debug-parallel-chameleon/thrift_ep-prefix/src/thrift_ep/compiler/cpp/src/thrift/thrifty.yy:589
#2 0x561649e7ba1e in parse(t_program*, t_program*) /tmp/tmp.BnUAMaceSS/cmake-build-debug-parallel-chameleon/thrift_ep-prefix/src/thrift_ep/compiler/cpp/src/thrift/main.cc:973
#3 0x561649e7d0a9 in main /tmp/tmp.BnUAMaceSS/cmake-build-debug-parallel-chameleon/thrift_ep-prefix/src/thrift_ep/compiler/cpp/src/thrift/main.cc:1280
#4 0x7f62c750bb96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)

由于我只对自己项目中的内存泄漏感兴趣,我尝试删除 -fsanitize=address来自全局 CXX 标志并仅在编译我自己的源时添加它。但是现在我收到很多链接错误,提示找不到函数 asan_report .
/usr/include/c++/7/bits/std_function.h:183: undefined reference to `__asan_report_store8'
/usr/include/c++/7/bits/std_function.h:183: undefined reference to `__asan_report_load8'
../../../debug/liblqf.a(filter.cc.o): In function `std::_Function_base::_Base_manager<lqf::sboost::DictLess<parquet::PhysicalType<(parquet::Type::type)1> >::scanPage(unsigned long, unsigned char const*, unsigned long*, unsigned long)::{lambda(int)#1}>::_M_init_functor(std::_Any_data&, {lambda(int)#1}&&, std::integral_constant<bool, true>)':

有没有办法我只能从我自己的代码中看到 sanitizer 结果?

最佳答案

clang 的地址清理程序似乎有一种机制可以抑制 external libraries 中的报告。 .

该示例显示您需要以下格式的抑制文件:

interceptor_via_fun:NameOfCFunctionToSuppress
interceptor_via_fun:-[ClassName objCMethodToSuppress:]
interceptor_via_lib:NameOfTheLibraryToSuppress

您需要通过 ASAN_OPTION 指向它:
ASAN_OPTIONS=suppressions=MyASan.supp

关于c++ - 我可以将 c++ sanitizer 仅应用于我的程序部分而不是第三方库吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61967141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com