Google AddressSanitizer简介

AddressSanitizer (ASan) 是 C 和 C++ 的内存错误检测软件,它可以检测:

  • 释放指针后继续使用
  • 堆缓冲区溢出
  • 栈缓冲区溢出
  • 全局缓冲区溢出
  • 返回后继续使用
  • 在范围之外继续使用
  • 初始化顺序的bug
  • 内存泄漏

在 Windows 系统中,可以在 LLVM 和 MSVC 中进行使用。

Visual Studio 2019的配置

先上两个链接:

https://devblogs.microsoft.com/cppblog/addresssanitizer-asan-for-windows-with-msvc/

https://devblogs.microsoft.com/cppblog/asan-for-windows-x64-and-debug-build-support/#16-9-preview-3-and-later

根据这两个链接进行安装配置应该问题不大,Visual Studio 16.9 Preview 3及其以后的版本不需要额外手动配置链接库,建议安装这个版本之后的软件,能省点事情,这样就只需要配置一下项目的属性即可,下面是简单的配置及测试结果。

CLion中的配置

先放个CLion的官方教程链接

配置ToolChains

CLion 中的配置稍微复杂一点,首先配置CLion的工具链,添加一个新的 Visual Studio的配置,正常情况下添加配置的时候会自动识别,但是我的社区版VS2019在CLion 2020.3这个版本下是无法自动识别的。我尝试过手动指定环境也没有识别,几经折腾后我放弃了,转头就安装了个企业版。这下还是无法自动识别,但是手动指定环境后就识别了,Architecture根据需要设定即可,Platform建议默认,Version根据需要设定即可,编译器直接使用自动检测的配置即可,如果安装了 Clang的编译器也可以手动指定为Clang的编译器,不过在后面配置CMakeLists.txt的时候需要更改链接库的路径为Clang对应的目录。

配置CMake选项

编写CMakeLists.txt

这个CMakeLists.txt文件会遍历所在目录下的所有 .cpp 源文件,每个源文件创建一个单独的可执行项目

cmake_minimum_required(VERSION 3.17)
project(LeetCode VERSION 1.0.0 LANGUAGES CXX) # Retrieve all cpp file in the current cmake source directory
file(GLOB SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp) # debug message
function(debug_message MESSAGE)
message("==============================")
message(${MESSAGE})
message("==============================")
endfunction() if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(BuildType "dbg_")
endif () # add all to executable target
foreach (SRC IN LISTS SOURCES)
string(REGEX REPLACE "(^.+)\\.(.+$)" \\1 TMP_SRC ${SRC})
string(REPLACE " " "_" TARGET_NAME ${TMP_SRC})
add_executable(${TARGET_NAME} ${SRC})
target_include_directories(${TARGET_NAME} PRIVATE include)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
target_compile_options(${TARGET_NAME} PRIVATE -fsanitize=address)
# set link directories
target_link_directories(${TARGET_NAME} PRIVATE
"D:/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.28.29333/lib/x64/")
target_link_libraries(${TARGET_NAME} PRIVATE
clang_rt.asan_${BuildType}dynamic-x86_64
clang_rt.asan_${BuildType}dynamic_runtime_thunk-x86_64)
target_link_options(${TARGET_NAME} PRIVATE
/wholearchive:clang_rt.asan_${BuildType}dynamic_runtime_thunk-x86_64.lib)
endif ()
endforeach ()

测试

运行的时候可能会失败,把缺失的动态库拷贝到可执行文件目录下即可,不想拷贝就在环境变量里面添加与Visual Studio工具链匹配的路径也可。例如,我上面工具链设置的是amd64,CLion自动检测到的编译器是“D:\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64\cl.exe”,这时候把“D:\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64\”这个路径添加到环境变量中重启CLion即可正常运行。

本文博客地址

在Windows系统中配置Google AddressSanitizer的更多相关文章

  1. 如何在Windows系统中配置Mysql群集(Mysql Cluster)

    Mysql群集(Cluster)简介 MySQL群集需要有一组计算机,每台计算机的角色可能是不一样的.MySQL群集中有三种节点:管理节点.数据节点和SQL节点.群集中的某计算机可 能是某一种节点,也 ...

  2. 如何在Windows系统中配置Mysql群集(Mysql Cluster)

    MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障. Mysql群集(Cluster)简介 M ...

  3. windows系统中配置多版本anaconda

    1.最好从国内的镜像站下载anaconda,国外那个站实在是太慢了,清华开源软件镜像站(https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/) 2.如 ...

  4. Cmder命令行工具在Windows系统中的配置

    一.Cmder简介 Cmder:一款用于Windows系统中,可增强传统cmd命令行工具的控制台模拟器(类似于Linux系统中的终端控制窗口) 特点: 无需安装,解压即用 可使用较多Linux命令,如 ...

  5. UEFI+GPT模式下的Windows系统中分区结构和默认分区大小及硬盘整数分区研究

    内容摘要:本文主要讨论和分析在UEFI+GPT模式下的Windows系统(主要是最新的Win10X64)中默认的分区结构和默认的分区大小,硬盘整数分区.4K对齐.起始扇区.恢复分区.ESP分区.MSR ...

  6. mysql绿色版在windows系统中的启动

    mysql绿色版在windows系统中的启动 1.下载mysql免安装版 例如:mysql-5.7.11-winx64 2.修改配置文件,my-default.ini名称改为:my.ini,文件里面的 ...

  7. 在Windows系统中安装集成的PHP开发环境

    原文:在Windows系统中安装集成的PHP开发环境 刚想学php的,又不会配置复杂php的环境,可以使用集成的,目前网上提供常用的PHP集成环境主要有AppServ.phpStudy.WAMP和XA ...

  8. 64位Windows系统如何配置32位ODBC数据源

    在64位Windows系统中,默认“数据源(ODBC)”是64位的,包括“控制面板->管理工具->数据源 ”或在“运行”中直接运行“ODBCAD32”程序.如果客户端是32位应用程序,仍然 ...

  9. Windows系统Git配置教程(Git配置git config)

    Windows系统Git配置教程(Git配置git config)   在很多Git配置教程中,多是安装完毕后就告诉大家要配置用户名和邮箱,但是这个配置是保存在哪里呢,配置后面的参数有什么不同呢,下面 ...

随机推荐

  1. Educational Codeforces Round 86 (Div. 2)

    比赛链接:https://codeforces.com/contest/1342 A - Road To Zero 题意 有两个非负整数 x, y 以及两种操作: 支付 a 点代价使其中一个数加一或减 ...

  2. 【bzoj 2467】[中山市选2010]生成树(数论--排列组合)

    题目:有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边组成的圈.在中心的这个n边圈的每一条边同时也是某一个五角形的一条边,一共有n个不同的五角形.这些五角形只在五角形圈的中心的圈上有 ...

  3. poj1061青蛙的约会 (扩展欧几里德)

    Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...

  4. Codeforces Round #648 (Div. 2) E. Maximum Subsequence Value 贪心

    题意:E.Maximum Subsequence Value 题意: 给你n 个元素,你挑选k个元素,那么这个 k 集合的值为 ∑2i,其中,若集合内至少有 max(1,k−2)个数二进制下第 i 位 ...

  5. Toxophily HDU - 2298 三分+二分

    代码+解析: 1 //题意: 2 //有一个大炮在(0,0)位置,为你可不可以把炮弹射到(x,y)这个位置 3 //题目给你炮弹初始速度,让你求能不能找出来一个炮弹射出时角度满足题意 4 //题解: ...

  6. MySQL 主从复制(下)

    延时复制 因为延时复制主从数据同一时间不一致, 所以延时从库一般只能做备份,不提供任何对外服务 配置延时复制(已经有主从) 1.停止主从 mysql> stop slave; Query OK, ...

  7. LINUX - pthread_mutex_lock

    原文链接:https://www.cnblogs.com/fengbohello/p/7571722.html 互斥的概念 在多线程编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性. 每个对 ...

  8. leetcode 122 123 309 188 714 股票买卖 动态规划

    这类问题有一个通法 https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii/solution/yi-ge-tong-y ...

  9. HDU 4746 Mophues(莫比乌斯反演)题解

    题意: \(Q\leq5000\)次询问,每次问你有多少对\((x,y)\)满足\(x\in[1,n],y\in[1,m]\)且\(gcd(x,y)\)的质因数分解个数小于等于\(p\).\(n,m, ...

  10. Install wx

    Ubuntu 16.04: 由于是PY交易, 实际上是安装wxPython: pip install -U \ -f https://extras.wxpython.org/wxPython4/ext ...