首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置ASAN/UBSAN报告输出

如何设置ASAN/UBSAN报告输出
EN

Stack Overflow用户
提问于 2016-09-25 20:08:54
回答 3查看 5.5K关注 0票数 5

我想使用-fsanitize=address,undefined运行我的单元测试套件,并将所有杀菌器错误写入到report.txt文件中。默认情况下,所有的消毒器错误都会写入stdout,但是软件也会将信息写入stdout,因此很难检测到错误。我试过了:

代码语言:javascript
复制
export ASAN_OPTIONS="log_path=asan.log"
./mytests

我还尝试在运行测试之前调用C API:

代码语言:javascript
复制
#include <sanitizer/asan_interface.h>

__sanitizer_set_report_path("/tmp/asan.log")

然而,这两种方法似乎都不起作用,所有的错误都会写入stdout。我正在使用Debian测试:

代码语言:javascript
复制
root@94e239ad460a:~# gcc --version
gcc (Debian 6.1.1-11) 6.1.1 20160802
Copyright (C) 2016 Free Software Foundation, Inc.

有没有其他方法可以将单元测试中的杀菌器错误保存在某个地方?

EN

回答 3

Stack Overflow用户

发布于 2016-10-24 16:33:12

嗯,我已经成功地使用过log_path很多次了。如果它对你不起作用,请向ASan github报告一个错误(最好是最小的repro)。

票数 2
EN

Stack Overflow用户

发布于 2020-02-27 03:34:02

我意识到我的二进制文件没有读权限。一个简单的chmod 500 <exe_path>解决了我的问题。

票数 1
EN

Stack Overflow用户

发布于 2018-08-20 17:19:55

我通常要做的是确保该目录存在。你可以使用Qt:

代码语言:javascript
复制
QDir().mkpath("/tmp");

Asan会在你的文件名后附加一个PID,我不认为你可以禁用它。

在我common_interface_defs.h中只有__sanitizer_set_report_path,但我看到了传递文件描述符的gcc's master has a more recent function

代码语言:javascript
复制
void __sanitizer_set_report_fd(void *fd);

你可以看看你的平台的gcc/clang是否有更新的功能来设置文件描述符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39686628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档