我正在尝试运行我的应用程序,启用ASAN来搜索泄漏和其他错误,但是,因为我在应用程序内部使用popen,所以清洁剂也会报告子进程错误(我真的不关心并且令人困惑) )。
有没有办法让它忽略子进程?
我的环境是:Fedora 26,gcc 7.3.1,libasan 7.3.1-6
我怀疑您正在使用LD_PRELOAD=libasan.so
,这将导致Asan运行时被预加载到子进程。这将导致一些有限形式的清理,因为运行时将拦截并清理对标准libc函数(如malloc
或memcpy
)的调用。
没有内置的方法来禁用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