linux - 如何让 ASAN 忽略子进程?
问题描述
我正在尝试在启用 ASAN 的情况下运行我的应用程序以搜索泄漏和其他错误,但是,由于我在应用程序中使用 popen,因此 sanitizer 似乎也报告了子进程错误(我真的不关心并且令人困惑)。
有没有办法让它忽略子进程?
我的环境是:Fedora 26、gcc 7.3.1、libasan 7.3.1-6
解决方案
我怀疑您正在使用LD_PRELOAD=libasan.so
它将导致 Asan 运行时预加载到子进程。这将导致某种有限形式的清理,因为运行时将拦截和清理对标准 libc 函数(如malloc
or )的调用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
推荐阅读
- css - 如何在首页而不是整页上隐藏父级的子级
- php - Api-platform - 虚拟属性 - 集合非规范化
- javascript - Highcharts:双面传奇
- routing - 自定义模块 - 找不到页面
- python - 如何比较一个字符串是否在列表中,并在lower()中读取该列表中的每个项目?
- c# - C# 桌面应用程序。代码混淆。.Net Reactor 混淆的代码很容易被反混淆
- python - Google Firestore python 库在 AWS Lambda 中不起作用
- visual-studio - Visual Studio 2015 更新 3 社区 - 脱机安装失败 - 包丢失
- jenkins - 将 Jenkins 凭据锁定到共享库的任何策略?
- javascript - 管理员登录面板页面不断刷新