如何检测 c++++ 框架中的资源泄漏?使用 vs code:安装 llvm leaksanitizer 扩展在 .vscode/tasks.json 中启用检查执行程序码,vs code 会显示泄漏错误使用 llvm leaksanitizer:编译程序码,启用 leaksanitizer执行程序码,终端机将列出未释放的内存分配
如何检测 C++ 框架中的资源泄漏
概述
资源泄漏是 C++ 框架中常见的错误,它会损坏内存并将程序置于不稳定状态。检测和修复这些泄漏至关重要,以维护代码的完整性。本文将指导您了解如何使用 VS Code 和 LLVM LeakSanitizer 检测和解决 C++ 框架中的资源泄漏。
立即学习“C++免费学习笔记(深入)”;
使用 VS Code 检测泄漏
步骤 1:安装 LeakSanitizer 扩展
从 VS Code 市场安装 LLVM LeakSanitizer 扩展。
步骤 2:啟用檢查
在 .vscode/tasks.json 文件中添加以下配置:
{
"version": "2.0.0",
"tasks": [
{
"label": "leaksan",
"type": "cppbuild",
"command": "mingw32-g++",
"args": [
"-std=c++20",
"-Wall",
"-Werror",
"-fsanitize=leak",
"-o",
"${fileDirname}${fileBasenameNoExtension}.exe",
"${file}"
],
"problemMatcher": {
"base": "$gcc",
"pattern": {
"regexp": "(([.+?]]) (error|warning):) .+:(d+):(d+): .+"
}
}
}
]
}
步驟 3:執行程式碼
按 F5 鍵執行程序碼。如果檢測到洩漏,VS Code 將顯示錯誤消息。
使用 LLVM LeakSanitizer 檢測洩漏
步驟 1:編譯程式碼
在終端機中執行以下命令,啟用 LeakSanitizer:
clang++ -fsanitize=leak -o program program.cpp
步驟 2:執行程式碼
執行程序碼:
./program
如果檢測到洩漏,終端機將列出未釋放的內存分配。
實戰案例
讓我們考慮以下 C++ 代碼:
#include <iostream>
int main() {
int* arr = new int[100];
std::cout << "Allocated array" << std::endl;
// 忘記釋放 arr
}
執行此代碼會使用 VS Code 和 LLVM LeakSanitizer 檢測到以下洩漏:
VS Code:
[MemorySanitizer] Memory leak detected on thread 9. Leak report follows:
LLVM LeakSanitizer:
==44257== LeakSanitizer: detected memory leaks
Direct leak of 400 byte(s) in 1 object(s) allocated from:
#0 0x7f721f78d15f in malloc (/usr/local/Cellar/llvm/14.0.6/lib/libLLVM.dylib:x86_64-darwin21.6.0+arm64)
#1 0x104c796da8 in operator new[](unsigned long) (/usr/local/lib/libc++.1.dylib:x86_64-darwin21.6.0+arm64)
#2 0x100001d70 in main (program.cpp:5)
Indirect leak of 400 byte(s) in 1 object(s) allocated from:
#0 0x104c796da8 in operator new[](unsigned long) (/usr/local/lib/libc++.1.dylib:x86_64-darwin21.6.0+arm64)
#2 0x100001d70 in main (program.cpp:5)