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

Gcc 如何设置ASAN/UBSAN报告输出,gcc,clang,sanitizer,ubsan,address-sanitizer,Gcc,Clang,Sanitizer,Ubsan,Address Sanitizer,我想用-fsanize=address运行我的单元测试套件,未定义,并将所有消毒器错误写入report.txt文件。默认情况下,所有消毒器错误都会写入标准输出,但软件也会将信息写入标准输出,因此很难检测错误。我试过: export ASAN_OPTIONS="log_path=asan.log" ./mytests 我还尝试在运行测试之前调用C API: #include <sanitizer/asan_interface.h> __sanitizer_set_report_pa

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

export ASAN_OPTIONS="log_path=asan.log"
./mytests
我还尝试在运行测试之前调用C API:

#include <sanitizer/asan_interface.h>

__sanitizer_set_report_path("/tmp/asan.log")

是否有其他方法可以将单元测试中的消毒器错误保存到某个地方?

Hm,我已经多次成功使用log\u path。如果它对您不起作用,请向ASan github报告一个bug(最好只需最少的复制)。

我总是要确保目录存在。 您可以使用Qt:

QDir().mkpath("/tmp");
Asan会给你的文件名添加一个PID,我认为你不能禁用它

在我的
common\u interface\u defs.h
中只有
\uuuu sanitarizer\u set\u report\u path
,但我看到在传递文件描述符的地方:

void __sanitizer_set_report_fd(void *fd);

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

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

注意,Asan需要诊断。
void __sanitizer_set_report_fd(void *fd);