请教大佬们关于 C++ AddressSanitizer 环境的搭建问题
687
2022.11.05
发布于 未知归属地

首先,lc 这里 C++17 & AddressSanitizer
image.png

并且可以使用 万能头文件 & pb_ds, 把它们贴进去运行代码也是没问题的。
image.png

目标

尝试在本机 Windows 搭建这样的环境:

能够使用 C++17 以上的特性
能够使用万能头文件 #include <bits/stdc++.h>
能够使用 pb_ds 库
能够使用 AddressSanitizer 进行代码越界等检测

本机环境:

  • Windows + Clion

尝试 1

首先尝试了按照 jetbrains 官网 的手法利用 Visual Studio 搭建:
image.png

此时的 CMakeLists:

cmake_minimum_required (VERSION 3.12)

project (C_)
set (CMAKE_CXX_STANDARD 20)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g -O0")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0")
file (GLOB files ./*.cpp)
foreach (file ${files})
    string(REGEX REPLACE ".+/(.+)\\..*" "\\1" exe ${file})
    add_executable (${exe} ${file})
    target_link_directories(${exe} PRIVATE "D:/Programs/VisualStudio/program/VC/Tools/Llvm/x64/lib/clang/12.0.0/lib/windows")
    target_link_libraries(${exe} PRIVATE clang_rt.asan_dynamic-x86_64 clang_rt.asan_dll_thunk-x86_64)
    target_link_options(${exe} PRIVATE /wholearchive:clang_rt.asan_dynamic_runtime_thunk-x86_64.lib)
    message (./${exe}.cpp\ will\ be\ compiled\ to\ ./${exe})
endforeach ()

于是光荣地报错了
image.png

这个报错并没有 Google 到解决办法(因为解决办法就是上面官网那里的配置)
release 虽然没有报错,但是连个 hello world 都运行不了。
image.png

image.png

ps: 把 CMakeLists 中的 -fsanitize=address 和三行 target_link 删掉,可以运行代码,但是无法打上断点 debug,并且这样也没实现我都要的 AddressSanitizer.

尝试 2

msys2 搭建了 MinGWClang 的环境。并且把 g++, gcc, clang 都加到环境变量了
image.png
配置了 clangToolchains, 可以正常编译运行代码。
image.png
但是 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")后, 爆了个这样的错
image.png
然而这里是有值的,懵
image.png

ps:而且 clang 没有万能头文件和 pb_ds, 即使我从 MinGW 那里复制了过去也还是会编译报错。

佬们教教

评论 (3)