基于Clion的c++内存使用监测工具

2024-02-25  本文已影响0人  仙人掌__

目前业界有提供了一些工具来检查c++的内存问题并符号化(泄漏,野指针等等),Google Sanitizer(Google基于Clang的子项目)、Valgrind。Clion也将这些工具集成了进来,如下为Mac平台下的使用过程:

平台:MacOS 14.0。

1、Google Sanitizer

可以实现内存泄漏检测,内存使用错误等等符号化功能。由于XCode自带的clang不包含这些功能,所以需要单独进行编译llvm,这里通过brew安装llvm


brew install llvm
xcode-select --install
brew info llvm
Next-gen compiler infrastructure
https://llvm.org/
/usr/local/Cellar/llvm/17.0.6 (7,207 files, 1.8GB)
  Poured from bottle using the formulae.brew.sh API on 2023-12-08 at 11:43:07
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/l/llvm.rb
License: Apache-2.0 with LLVM-exception

备注:一定要安装xcode-select --install,否则调用clang进行编译时会各种找不到头文件

添加Clion环境变量-DABS_OPEN_SANITIZER=1,将打开内存使用错误和符号化的功能。

如果还要开启内存泄漏检测同时需要在Clion中添加detect_leaks=1,如下截图:

image.png

1、对于内存使用错误,例如多次释放、野指针、溢出等等问题,运行阶段既可以检测出来,比如有如下一段代码,运行后可以检测到有内存溢出的问题

int global_array[100] = {-1};

int main(int argc, char **argv) {
    return global_array[argc + 100];  // global buffer overflow
}
image.png

2、对于内存泄漏,需要退出程序后可以检测出来。以我们自己Qt项目为例,初步用了一下,发现有几处泄漏

image.png

总体来说这个工具检测内存问题应该可以作为参考,实际效果应该还需要看后续的具体使用和继续深入研究

1、Valgrind

同样也可以实现内存泄漏检测,内存使用错误等等符号化功能。不过根据官网手册,它不支持M1架构Mac。

xcode-select --install
brew tap LouisBrunner/valgrind
brew install --HEAD LouisBrunner/valgrind/valgrind

/usr/local/bin/valgrind填入下面字段

image.png

点击OK后 然后就可以使用该工具了。

[图片上传失败...(image-94906c-1708673224246)]

目前还不支持MacOS14系统。不能与Google Sanitizer 同时使用

参考文档

https://www.jetbrains.com/help/clion/google-sanitizers.html#clang-cl-configure

上一篇 下一篇

猜你喜欢

热点阅读