我已经用-fsanitize=undefined选项编译了我的应用程序。我现在如何测试我的应用程序是否有未定义的行为?
另外,我如何运行一个Asan检查?我用-fsanitize=address编译了我的程序,程序崩溃了,输出如下:
==4563==Sanitizer CHECK failed: ../../../../src/libsanitizer/asan/asan_malloc_linux.cc:85 ((allocated < kCallocPoolSize)) != (0) (0, 0)我有GCC 4.9.2在Ubuntu 15.04。
发布于 2015-08-09 01:32:17
与静态分析检查不同,此检查将在运行时完成,如以下博客条目所解释:GCC不确定行为消毒剂--三三。当它检测到未定义的行为时,它将输出一个运行时错误:
为了用ubsan检查您的程序,请使用-fsanitize=undefined选项编译并链接该程序。必须执行这样的仪器化二进制文件;如果ubsan检测到任何问题,它会输出“运行时错误:”消息,并且在大多数情况下继续执行程序。有可能使这些诊断消息中止--只需使用选项-fno-sanitize-恢复。
我们可以从那里看到一个例子:
int main() {
int i = 23;
i <<= 32;
}使用-fsanitize=undefined运行时,将输出(http://coliru.stacked-crooked.com/a/4ebd9831fb6cd311):
运行时错误:移位指数32对于32位类型的int来说太大了
GCC在他们的调试程序或GCC部分的选项中记录了这个选项,上面写着:
启用UndefinedBehaviorSanitizer,一种快速未定义的行为检测器。使用各种计算来检测运行时未定义的行为。
https://stackoverflow.com/questions/31805590
复制相似问题