我试图使用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一起工作。
1条答案
按热度按时间htzpubme1#
我一直在摆弄CLion 2022. 3. 1下的AddressSanitizer,结合Linux下的gcc 12. 2. 1和clang 15. 0. 6,一开始我被IDE GUI愚弄了。
非零的返回代码是一切正常工作的第一个提示。返回代码显示在“控制台”选项卡中。通常控制台程序输出到标准输出的文本显示在这里。在控制台选项卡旁边有第二个选项卡“清理程序”。在那里
您将得到您可能正在寻找的AddressSanitizer的输出。