首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC 4.9.2中的UBSan和Asan用法

GCC 4.9.2中的UBSan和Asan用法
EN

Stack Overflow用户
提问于 2015-08-04 09:30:58
回答 1查看 10.1K关注 0票数 3

我已经用-fsanitize=undefined选项编译了我的应用程序。我现在如何测试我的应用程序是否有未定义的行为?

另外,我如何运行一个Asan检查?我用-fsanitize=address编译了我的程序,程序崩溃了,输出如下:

代码语言:javascript
复制
==4563==Sanitizer CHECK failed: ../../../../src/libsanitizer/asan/asan_malloc_linux.cc:85 ((allocated < kCallocPoolSize)) != (0) (0, 0)

我有GCC 4.9.2在Ubuntu 15.04。

EN

回答 1

Stack Overflow用户

发布于 2015-08-09 01:32:17

与静态分析检查不同,此检查将在运行时完成,如以下博客条目所解释:GCC不确定行为消毒剂--三三。当它检测到未定义的行为时,它将输出一个运行时错误:

为了用ubsan检查您的程序,请使用-fsanitize=undefined选项编译并链接该程序。必须执行这样的仪器化二进制文件;如果ubsan检测到任何问题,它会输出“运行时错误:”消息,并且在大多数情况下继续执行程序。有可能使这些诊断消息中止--只需使用选项-fno-sanitize-恢复。

我们可以从那里看到一个例子:

代码语言:javascript
复制
int main() {
    int i = 23;
    i <<= 32; 
}

使用-fsanitize=undefined运行时,将输出(http://coliru.stacked-crooked.com/a/4ebd9831fb6cd311):

运行时错误:移位指数32对于32位类型的int来说太大了

GCC在他们的调试程序或GCC部分的选项中记录了这个选项,上面写着:

启用UndefinedBehaviorSanitizer,一种快速未定义的行为检测器。使用各种计算来检测运行时未定义的行为。

至于asan问题,这个地址-消毒文件给出了一个示例和预期的结果。也许您的案例与这个gcc虫有关。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31805590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档