如何让ASAN忽略子进程?

时间:2018-09-07 14:22:15

标签: linux gcc address-sanitizer

我试图在启用ASAN的情况下运行我的应用程序以搜索泄漏和其他错误,但是,由于我在应用程序内部使用了popen,因此消毒剂似乎也会报告子进程错误(我真的不在乎)并且令人困惑)。

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

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

1 个答案:

答案 0 :(得分:1)

我怀疑您正在使用LD_PRELOAD=libasan.so,这将导致Asan运行时被预加载到子进程中。这将导致某种形式的清理,因为运行时将拦截和清理对标准mallocmemcpy之类的libc函数的调用。

在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