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. 【uva 1152】4 Values Whose Sum is Zero(算法效率--中途相遇法+Hash或STL库)

    题意:给定4个N元素几个A,B,C,D,要求分别从中选取一个元素a,b,c,d使得a+b+c+d=0.问有多少种选法.(N≤4000,D≤2^28) 解法:首先我们从最直接最暴力的方法开始思考:四重循 ...

  2. Java 窗口 绘制图形 #1

    写在前面: editplus换成eclipse了 Sketchpad要钱,买不起 自己搞(rua) by emeralddarkness 建立了一个平面直角坐标系 两个变元x,y,参数i 实现了以下功 ...

  3. 2.Url重定向和重写

    虚拟地址===>真实地址映射(搜索引擎优化,抽象能力,防盗链) 之前:IIS重写模块规则,Apache mod_Rewrite.Nginx上的URL重写. 现在:通过中间件来实现. 重定向与重写 ...

  4. 对模拟器虚假设备识别能力提升15%!每日清理大师App集成系统完整性检测

    前言 每日清理大师是一款智能便捷的手机清理软件,可快速清理无用缓存.垃圾文件和应用残留,还可深度清理如社交软件中的无用缓存等,有效解决手机卡顿.耗电快.内存不足等问题.每日清理大师App在结合了系统完 ...

  5. hdu5693D++游戏 区间DP-暴力递归

    主要的收获是..如何优化你递推式里面不必要的决策 之前的代码 这个代码在HDU超时了,这就对了..这个复杂度爆炸.. 但是这个思路非常地耿直..那就是只需要暴力枚举删两个和删三个的情况,于是就非常耿直 ...

  6. for-in循环等

    一.for-in循环 in表示从(字符串.序列等)中一次取值,又称为遍历 其便利对象必须是可迭代对象 语法结构: for 自定义的变量 in 可迭代对象: 循环体 for item in 'Pytho ...

  7. 图片转tfrecords

    import numpy as np import tensorflow as tf import time import os import cv2 from sklearn.utils impor ...

  8. CSS Multiple Columns

    CSS Multiple Columns CSS layout column-count column-gap column-rule-style column-rule-width column-r ...

  9. Flutter Search Component

    Flutter Search Component flutter 搜索组件 xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  10. CSS Shapes

    CSS Shapes shape-outside & shape-image-threshold <img class="element" src="ima ...