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);