如何设置 ASAN/UBSAN 报告输出

Jer*_*oen 5 gcc clang sanitizer address-sanitizer ubsan

我想运行我的单元测试套件,-fsanitize=address,undefined并将所有 sanitizer 错误写入report.txt文件。默认情况下,所有 sanitizer 错误都会写入 stdout,但是该软件也会将信息写入 stdout,因此这使得检测错误变得困难。我试过:

export ASAN_OPTIONS="log_path=asan.log"
./mytests
Run Code Online (Sandbox Code Playgroud)

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

#include <sanitizer/asan_interface.h>

__sanitizer_set_report_path("/tmp/asan.log")
Run Code Online (Sandbox Code Playgroud)

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

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

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

yug*_*ugr 2

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