Ily*_*lya 2 c++ gcc undefined-behavior address-sanitizer ubsan
我已经用-fsanitize=undefined选项编译了我的应用程序。现在如何测试应用程序的未定义行为?
另外,如何进行Asan检查?我已经使用编译了程序-fsanitize=address,并且崩溃并显示以下输出:
==4563==Sanitizer CHECK failed: ../../../../src/libsanitizer/asan/asan_malloc_linux.cc:85 ((allocated < kCallocPoolSize)) != (0) (0, 0)
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu 15.04上安装了GCC 4.9.2。
与静态分析检查不同,此检查将在运行时执行,如以下博客条目中所述:GCC未定义行为消毒剂– ubsan。当检测到未定义的行为时,它将输出运行时错误:
为了使用ubsan检查程序,请使用-fsanitize = undefined选项编译并链接程序。必须执行此类检测二进制文件;如果ubsan检测到任何问题,它将输出“运行时错误:”消息,并且在大多数情况下会继续执行程序。有可能使这些诊断消息中止-只需使用选项-fno-sanitize-recover。
我们可以从那里看到一个示例:
int main() {
int i = 23;
i <<= 32;
}
Run Code Online (Sandbox Code Playgroud)
运行时-fsanitize=undefined将输出(实时显示):
运行时错误:移位指数32对于32位类型'int'太大
GCC在“ 用于调试程序或GCC的选项”部分中记录了此选项,并显示:
启用UndefinedBehaviorSanitizer,一种快速的未定义行为检测器。各种计算都可以检测到运行时未定义的行为。
至于asan问题,此地址消毒器文档提供了示例和预期结果。也许您的情况与此gcc错误有关。
| 归档时间: |
|
| 查看次数: |
4874 次 |
| 最近记录: |