如何让 ASAN 忽略子进程?

How to get ASAN to ignore child process?

我正在尝试 运行 我的应用程序在启用 ASAN 的情况下搜索泄漏和其他错误,但是,由于我在应用程序内部使用 popen,sanitizer 似乎也报告了子进程错误(这我真的不关心和困惑)。

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

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

我怀疑您正在使用 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