c++ 解决消毒剂- ASAN在CLion和CMake中不工作

lnlaulya  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(285)

我试图使用CLion中的AddressSanitizer构建一个有明显漏洞的简单代码,但它没有检测到我的代码有任何问题。
main.cpp代码文件包含以下代码:

#include <cstdio>
#include <iostream>
#include <cstring>

#define STR_LENGTH 18

int main()
{

    printf("Test Project\n\n");

    char source[] = "This is a char array.";
    char dest[STR_LENGTH];

    strcpy(dest, source);

    printf("%s is the string after strcpy.\n",dest);

    char stack_mem[3] = {42,42,42};
    char stack_mem2[3] = {63,63,63};

    char x = stack_mem[4];
    std::cout << "X: " << static_cast<int>(x) << "\n";
    char y = stack_mem2[-1];
    std::cout << "X: " << static_cast<int>(y) << "\n";

    int* ptr = new int;

    return 0;
}

我的CMakeLists.txt文件包含以下代码:

cmake_minimum_required(VERSION 3.19)
project(asan)

set(CMAKE_CXX_STANDARD 17)
#set(CMAKE_VERBOSE_MAKEFILE true)

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")

add_executable(asan main.cpp)

然而,当我运行这个程序时,我没有看到任何问题。我得到的输出如下所示:

/home/dev/source.code/test-branch/asan/cmake-build-debug/asan
Test Project

Process finished with exit code 1

我尝试使用-fsanitize=address标志从g++的终端构建相同的代码,它显示了正确的问题,但我似乎无法使它与CLion一起工作。

htzpubme

htzpubme1#

我一直在摆弄CLion 2022. 3. 1下的AddressSanitizer,结合Linux下的gcc 12. 2. 1和clang 15. 0. 6,一开始我被IDE GUI愚弄了。

非零的返回代码是一切正常工作的第一个提示。返回代码显示在“控制台”选项卡中。通常控制台程序输出到标准输出的文本显示在这里。在控制台选项卡旁边有第二个选项卡“清理程序”。在那里

您将得到您可能正在寻找的AddressSanitizer的输出。

相关问题