5

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

export ASAN_OPTIONS="log_path=asan.log"
./mytests

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

#include <sanitizer/asan_interface.h>

__sanitizer_set_report_path("/tmp/asan.log")

然而,似乎两者都不起作用,所有错误都被写入标准输出。我正在使用 Debian 测试:

root@94e239ad460a:~# gcc --version
gcc (Debian 6.1.1-11) 6.1.1 20160802
Copyright (C) 2016 Free Software Foundation, Inc.

是否有任何替代方法可以将我的单元测试中的消毒剂错误保存在某处?

4

3 回答 3

2

嗯,我已经多次成功使用 log_path 了。如果它不适合您,请向 ASan github 报告错误(最好使用最少的重现)。

于 2016-10-24T08:33:12.497 回答
1

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

于 2020-02-26T19:34:02.460 回答
0

我总是做的是确保目录存在。你可以使用 Qt:

QDir().mkpath("/tmp");

不过,Asan 会在您的文件名中附加一个 PID,我认为您不能禁用它。

在我common_interface_defs.h那里只有__sanitizer_set_report_path但我看到gcc 的 master 有一个更新的函数,您可以在其中传递文件描述符:

void __sanitizer_set_report_fd(void *fd);

您可以检查您平台的 gcc/clang 是否具有设置文件描述符的更新功能。

于 2018-08-20T09:19:54.650 回答