【发布时间】:2017-12-26 19:43:12
【问题描述】:
是否可以设置某种回调,当 clang sanitizers 发现错误时将调用该回调?我需要打印一些有用的信息,例如 - 测试名称。
附:测试保存/存储为 XML 文件,而不是 C++,这就是堆栈跟踪不会告诉我失败的测试名称的原因。
【问题讨论】:
是否可以设置某种回调,当 clang sanitizers 发现错误时将调用该回调?我需要打印一些有用的信息,例如 - 测试名称。
附:测试保存/存储为 XML 文件,而不是 C++,这就是堆栈跟踪不会告诉我失败的测试名称的原因。
【问题讨论】:
有__sanitizer_set_death_callback和__asan_set_error_report_callback(在asan_interface.h中声明)。
正如 willir 所指出的,使用ASAN_OPTIONS=abort_on_error=1 运行可能就足够了。这将导致 Asan 在出错时调用 abort,然后许多单元测试框架可以跳过失败的测试并继续执行。
【讨论】:
ASAN_OPTIONS=abort_on_error 环境变量似乎就足够了。它使消毒剂调用abort 而不是_exit,因此您可以处理它。大多数测试框架已经处理abort。