我试图在启用ASAN的情况下运行我的应用程序以搜索泄漏和其他错误,但是,由于我在应用程序内部使用了popen,因此消毒剂似乎也会报告子进程错误(我真的不在乎)并且令人困惑)。
有没有办法让它忽略子进程?
我的环境是:Fedora 26,gcc 7.3.1,libasan 7.3.1-6
答案 0 :(得分:1)
我怀疑您正在使用LD_PRELOAD=libasan.so
,这将导致Asan运行时被预加载到子进程中。这将导致某种形式的清理,因为运行时将拦截和清理对标准malloc
或memcpy
之类的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