如何让 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 函数的调用,如 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
我正在尝试 运行 我的应用程序在启用 ASAN 的情况下搜索泄漏和其他错误,但是,由于我在应用程序内部使用 popen,sanitizer 似乎也报告了子进程错误(这我真的不关心和困惑)。
有没有办法让它忽略子进程?
我的环境是: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