我想使用-fsanitize=address,undefined运行我的单元测试套件,并将所有杀菌器错误写入到report.txt文件中。默认情况下,所有的消毒器错误都会写入stdout,但是软件也会将信息写入stdout,因此很难检测到错误。我试过了:
export ASAN_OPTIONS="log_path=asan.log"
./mytests我还尝试在运行测试之前调用C API:
#include <sanitizer/asan_interface.h>
__sanitizer_set_report_path("/tmp/asan.log")然而,这两种方法似乎都不起作用,所有的错误都会写入stdout。我正在使用Debian测试:
root@94e239ad460a:~# gcc --version
gcc (Debian 6.1.1-11) 6.1.1 20160802
Copyright (C) 2016 Free Software Foundation, Inc.有没有其他方法可以将单元测试中的杀菌器错误保存在某个地方?
发布于 2016-10-24 16:33:12
嗯,我已经成功地使用过log_path很多次了。如果它对你不起作用,请向ASan github报告一个错误(最好是最小的repro)。
发布于 2020-02-27 03:34:02
我意识到我的二进制文件没有读权限。一个简单的chmod 500 <exe_path>解决了我的问题。
发布于 2018-08-20 17:19:55
我通常要做的是确保该目录存在。你可以使用Qt:
QDir().mkpath("/tmp");Asan会在你的文件名后附加一个PID,我不认为你可以禁用它。
在我common_interface_defs.h中只有__sanitizer_set_report_path,但我看到了传递文件描述符的gcc's master has a more recent function:
void __sanitizer_set_report_fd(void *fd);你可以看看你的平台的gcc/clang是否有更新的功能来设置文件描述符。
https://stackoverflow.com/questions/39686628
复制相似问题