彩票走势图

C/C++开发工具CLion动态代码分析教程(二):AddressSanitizer

翻译|使用教程|编辑:董玉霞|2022-06-23 10:44:15.343|阅读 779 次

概述:本文主要介绍在 CLion中进行动态代码分析时AddressSanitizer相关内容 。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

本文主要介绍在 CLion中进行动态代码分析时AddressSanitizer相关内容 。

AddressSanitizer

AddressSanitizer (ASan)是一种内存损坏检测器,能够发现以下类型的错误:

  • 堆、堆栈和全局缓冲区溢出。
  • 释放后使用(悬空指针取消引用)。
  • 作用域后使用-fsanitize-address-use-after-scope。
  • 返回后使用(传递detect_stack_use_after_return=1给ASAN_OPTIONS)。
  • 双倍免费,无效免费。
  • 初始化顺序错误。

ASan 详细信息:FAQ、标志列表、如何将 ASan 与 GDB 一起使用、关闭 ASan 检测、ASan 算法、Clang 中的 ASan。

例如,考虑以下代码片段:

int global_array[100] = {-1};

int main(int argc, char **argv) {
    return global_array[argc + 100];  // global buffer overflow
}

当使用标志构建时,由于AddressSanitizer 检测到全局缓冲区溢出-fsanitize=address -fno-omit-frame-pointer -O1,该程序将以非零代码退出:

跨平台C/C++开发软件CLion使用教程。

请注意,ASan 在第一个检测到的错误时停止。要更改此行为并使 ASan 在报告第一个错误后继续运行,请添加到-fsanitize-recover=address编译器标志和.halt_on_error=falseASAN_OPTIONS。

在 Windows 上配置 AddressSanitizer

在 Windows 上,您可以使用clang-cl编译器在MSVC 工具链下使用 AddressSanitizer。

  1. 运行Visual Studio 安装程序并确保安装C++ AddressSanitizer组件。您可以在使用 C++ 的桌面开发节点下找到它:
  2. 跨平台C/C++开发软件CLion使用教程。

  3. 在 CLion 中,转到设置/首选项 | 构建、执行、部署 | 工具链并创建新的Visual Studio工具链或编辑现有工具链。
    • 将架构设置为x86_amd64。
    • 在C Compiler和C++ Compiler字段中设置clang-cl的路径。
      您可以使用LLVM 发行版或 Visual Studio 工具中的clang-cl 。在后一种情况下,路径将是例如C: \Program Files(x86) \Microsoft Visual Studio \2019 \Community \VC \Tools \Llvm \bin \clang-cl.exe。
    • 跨平台C/C++开发软件CLion使用教程。

  4. 在您的CMakeLists.txt中,在命令后添加以下行add_executable(替换exec为您的可执行文件的名称):
    target_compile_options(exec PRIVATE -fsanitize=address)
    target_link_directories(exec PRIVATE "$ENV{ProgramFiles\(x86\)}/Microsoft Visual Studio/2019/Professional/VC/Tools/Llvm/x64/lib/clang/10.0.0/lib/windows")
    target_link_libraries(exec PRIVATE clang_rt.asan_dynamic-x86_64 clang_rt.asan_dynamic_runtime_thunk-x86_64)
    target_link_options(exec PRIVATE /wholearchive:clang_rt.asan_dynamic_runtime_thunk-x86_64.lib)
  5. 如果需要,调整ProgramFiles \(x86 \)} /Microsoft Visual Studio /2019 /Professional /VC /Tools /Llvm /x64 /lib /clang /10.0.0 /lib /windows路径。此目录包含 AddressSanitizer 所需的库。

  6. 转到设置/首选项 | 构建、执行、部署 | CMake,创建一个Release profile,并将其设置为默认值(将其移动到配置文件列表的顶部):
  7. 跨平台C/C++开发软件CLion使用教程。

  8. 尝试加载并构建项目。如果出现链接器错误,请将ProgramFiles \(x86 \)} /Microsoft Visual Studio /2019 /Professional /VC /Tools /Llvm /x64 /lib /clang /10.0.0 /lib /windows中的所有文件复制到cmake-构建发布文件夹。

以上就是在 CLion中关于AddressSanitizer的相关教程内容,更多关于CLion使用教程的内容可进入官网查看。

CLion| 下载试用

CLion是一款专为开发C及C++所设计的跨平台IDE。它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。


CLion技术交流QQ群:786598704      欢迎进群一起讨论


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP