如何让ASAN忽略子进程?

问题描述 投票:1回答:1

我正在尝试运行我的应用程序,启用ASAN来搜索泄漏和其他错误,但是,因为我在应用程序内部使用popen,所以清洁剂也会报告子进程错误(我真的不关心并且令人困惑) )。

有没有办法让它忽略子进程?

我的环境是:Fedora 26,gcc 7.3.1,libasan 7.3.1-6

linux gcc address-sanitizer
1个回答
1
投票

我怀疑您正在使用LD_PRELOAD=libasan.so,这将导致Asan运行时被预加载到子进程。这将导致一些有限形式的清理,因为运行时将拦截并清理对标准libc函数(如mallocmemcpy)的调用。

没有内置的方法来禁用Asan内部,所以最好的办法是在程序启动时重置LD_PRELOAD

int main() {
# ifdef __SANITIZE_ADDRESS__
  // Do not sanitize child processes
  // TODO: strip only libasan.so, keep everything else
  unsetenv("LD_PRELOAD");
# endif
© www.soinside.com 2019 - 2024. All rights reserved.