gpt4 book ai didi

c++ - gcc - 如何使用地址 sanitizer

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:29 25 4
gpt4 key购买 nike

我在 Linux 上使用 gcc 4.8.5。我想使用地址清理器,但它不会返回有关该程序的任何信息。标志:

SET(CMAKE_CXX_FLAGS "-Wall -Wno-error -g -std=c++11 -fno-omit-frame-pointer -fsanitize=address")
SET(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address")

链接库:

target_link_libraries(testcpp asan)

有内存泄漏的测试程序:

int main()
{
int *prt = new int;
return 0;
}

怎么了?

最佳答案

我在最近的 Debian/Sid/x86-64 上用 GCC7 编译了这个

// file irbis.cc
int main()
{
int *prt = new int;
return 0;
}

使用

g++ -fsanitize=address -g3 -std=c++11 irbis.cc -o irbis

并且在执行 ./irbis 时正确检测到泄漏:

=================================================================
==22742==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 4 byte(s) in 1 object(s) allocated from:
#0 0x7f77ea911340 in operator new(unsigned long)
(/usr/lib/x86_64-linux-gnu/libasan.so.4+0xdb340)
#1 0x55ea91cca81b in main /home/basile/tmp/irbis.cc:4
#2 0x7f77e9c1f2e0 in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x202e0)

SUMMARY: AddressSanitizer: 4 byte(s) leaked in 1 allocation(s).

因此升级您的 GCC 编译器(至少升级到 GCC6)。我知道 GCC4.8 对地址清理器和 C++11 的支持不完整(顺便说一句,GCC4.8 已过时,GCC5 也已过时,2017 年 11 月)。

关于c++ - gcc - 如何使用地址 sanitizer ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47201087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com