抑制地址清理程序的 gtest 的统一测试

2024-01-17

我正在我的单元测试上运行地址清理程序。 Cmake 看起来像这样:

    cmake -G"Unix Makefiles" \
    -DCMAKE_CXX_COMPILER=clang++-9 \
    -DCMAKE_C_COMPILER=clang-9 \
    -DCMAKE_C_FLAGS='-fsanitize=address -fsanitize-address-use-after-scope' \
    -DCMAKE_CXX_FLAGS='-fsanitize=address -fsanitize-address-use-after-scope' \

运行命令是

make clean
ASAN_OPTIONS=detect_stack_use_after_return=1 make a.out -j
ASAN_OPTIONS=detect_stack_use_after_return=1 LSAN_OPTIONS=verbosity=1 ./a.out

Unitests 是用 gtest 框架编写的。

根据定义,有一些unitest应该对数组边界之外进行非法访问。 我想知道如何抑制这个测试

TEST_F(classA, testA) {
   some_struct a;
   a.p = 100;
   ASSERT_FALSE(&foo());
}

我在这里看到了抑制函数的选项,但我不知道如何将其应用到unitest函数上https://github.com/google/sanitizers/wiki/AddressSanitizer https://github.com/google/sanitizers/wiki/AddressSanitizer

#if defined(__clang__) || defined (__GNUC__)
# define ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
#else
# define ATTRIBUTE_NO_SANITIZE_ADDRESS
#endif
...
ATTRIBUTE_NO_SANITIZE_ADDRESS
void ThisFunctionWillNotBeInstrumented() {...}

我怎样才能抑制这个测试

最简单的方法可能是#ifdef it out:

TEST_F(classA, testA) {
#if defined(__SANITIZE_ADDRESS__)
   std::cerr << "classA.testA skipped under AddressSanitizer" << std::endl;
#else
   some_struct a;
   a.p = 100;
   ASSERT_FALSE(&foo());
#endif
}

或者你可以#ifdef整个测试:

#if !defined(__SANITIZE_ADDRESS__)
TEST_F(classA, testA) {
   std::cerr << "classA.testA skipped under AddressSanitizer" << std::endl;
   some_struct a;
   a.p = 100;
   ASSERT_FALSE(&foo());
}
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抑制地址清理程序的 gtest 的统一测试 的相关文章

随机推荐

  • 如何将 NSWorkspace 通知迁移到 Swift 4?

    在 Swift 3 中 我使用以下代码注册了睡眠和唤醒通知 let notificationCenter NSWorkspace shared notificationCenter notificationCenter addObserve
  • 是否可以根据国家/地区提供多个 APK 支持?

    我有一个包含免费和收费产品的应用程序 我需要为我的应用程序创建两个 APK 并在支持应用内结算的国家 地区显示支持应用内结算的应用程序 并显示不支持应用内结算的同一应用程序的另一个 APK 在不支持的国家 地区进行应用程序计费 仅提供免费产
  • 如何从 JSON 对象中提取属性及其值 [重复]

    这个问题在这里已经有答案了 我返回以下 json 对象并将其存储在名为 data 的变量中 data min 1 q1 59 median 117 q3 175 max 233 由于这是单个对象而不是对象数组 因此我无法执行 data 0
  • cimg 库 - 链接错误[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我尝试使用 cimg 库 我已经包含了 CImg h 头文件 但是当我尝试编译它时 出现链接错误 tmp cc2tvYs
  • 卡在“将 API 使用情况发送到 iTunes Connect”上

    我尝试将用 Starling 开发的游戏上传到应用商店 但 应用程序加载器 停留在 将 API 使用情况发送到 iTunes Connect 10 天前上传成功 新版本只有一行不同的代码编译是一样的 有人有这个问题吗 有人有解决办法吗 我尝
  • 如何启用Objectify XA事务?

    我正在同一类型的实体之间实现友谊功能Profile 该实体类型是根 非父 实体 一个配置文件有一个Set
  • Photoshop“黑白”调整图层背后的算法是什么?

    我做了很多研究 但没有找到任何东西 但我也不知道到底要搜索什么样的关键字 我希望能够转换输入RGB图像到灰度但我希望能够添加更多或更少红色 黄色 绿色 青色 蓝色 洋红色像Photoshop 您知道等式是什么吗 或者我在哪里可以找到这些等式
  • C语言中如何将int转换为float?

    我正在尝试解决 int total 0 number 0 float percentage 0 0 percentage number total 100 printf 2f percentage 如果数字的值为 50 总数为 100 我应
  • -xms 总和大于主机 RAM 的多个 JVM

    注意 我是 Java 新手 我是 Python 开发人员 JVM 的想法对我来说很陌生 假设您有一台 8 核 160GB RAM 的服务器 如果您使用 xms 100G 运行 Java 程序 它不会抛出任何错误 如果使用 xms 100G
  • Perforce 相当于 git local commit

    我在使用 Git 一年后才开始使用 Perforce 是否有任何等同于 git local commit 到我的分支的强制 本质上 如果我想要完成一项可能需要撤消和重做我的特定更改的复杂任务 有什么方法可以在 Perforce 中完成此任务
  • 是否可以在 Hudson/Jenkins 中用参数化字符串替换整个存储库 URL?

    在 Hudson Jenkins 中 是否可以替换entireSubversion 模块存储库 URL 中带有字符串参数的字符串 我不想只替换版本或类似的内容 我想替换整个网址 因此 当我运行构建时 我会收到输入 URL 的提示 我会输入类
  • C++ 从字符串中间提取数字

    我有一个vector含有strings遵循以下格式text number number Eg Example 45 3 我只想要第一个数字 45在示例中 并且我无法使用当前代码执行其他操作 std vector
  • 在不同的函数中分配的空闲内存?

    我正在尝试学习 C 目前正在尝试编写基本的堆栈数据结构 但我似乎无法掌握基本的知识malloc free right 这是我一直在使用的代码 我只是在这里发布一小部分来说明特定问题 而不是全部代码 但错误消息是通过运行此示例代码生成的val
  • PGAdmin III 无法连接 AWS RDS

    我正在尝试从 PgAdmin 3 连接 AWS RDS PostgreSql 我点击了以下链接http docs aws amazon com AmazonRDS latest UserGuide USER ConnectToPostgre
  • 创建包含多个 AAR/JAR 的 AAR

    我看到了一些问题 Android Studio 将 2 个 aar 合二为一 https stackoverflow com questions 30084314 android studio combine 2 aar into one和
  • Google 地图标记为链接

    我在我的网站上使用 Google 地图 但我想知道如何使用Markers作为链接 我的意思是当我单击标记打开特定链接时 先感谢您 这实际上很容易做到 只需将事件处理程序附加到您的标记 然后通过设置启动链接window location hr
  • 在 Hibernate JPA 实体中用另一个列表替换一个列表是否合法?

    假设一个 Hibernate 4 2 JPA 2 0 实体class EntityA 它包含一个 ManyToOne field List
  • 连接多个字典以创建新列表,其值作为原始字典的值列表

    我使用的是 Python 2 7 并且在这里查看了几个解决方案 如果您知道要合并多少个字典 这些解决方案就有效 但我可以有 2 到 5 个之间的任何内容 我有一个循环 它生成一个具有相同键但不同值的字典 我想将新值添加到以前的值中 Such
  • 过滤输入 URL 的最佳方法是什么?

    我有一个接受来自 PHP 用户的 URL 的表单 我应该允许或禁止哪些字符 目前我使用 input preg replace a zA Z0 9 string 输入 子字符串 输入 0 255 因此 它被修剪为 255 个字符 并且只能包含
  • 抑制地址清理程序的 gtest 的统一测试

    我正在我的单元测试上运行地址清理程序 Cmake 看起来像这样 cmake G Unix Makefiles DCMAKE CXX COMPILER clang 9 DCMAKE C COMPILER clang 9 DCMAKE C FL