【问题标题】:How to set ASAN/UBSAN reporting output如何设置 ASAN/UBSAN 报告输出
【发布时间】:2016-09-25 12:08:54
【问题描述】:

我想使用-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.

是否有任何替代方法可以将我的单元测试中的 sanitizer 错误保存在某个地方?

【问题讨论】:

    标签: gcc clang sanitizer ubsan address-sanitizer


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案3】:

      我总是做的是确保目录存在。 你可以使用 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 是否具有设置文件描述符的新功能。

      【讨论】:

        猜你喜欢
        • 2022-01-15
        • 2015-10-26
        • 1970-01-01
        • 1970-01-01
        • 2020-01-04
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多