如何检测 C++ 框架中的资源泄漏?使用 VS Code:安装 LLVM LeakSanitizer 扩展在 .vscode/tasks.json 中启用检查执行程序码,VS Code 会显示泄漏错误使用 LLVM LeakSanitizer:编译程序码,启用 LeakSanitizer执行程序码,终端机将列出未释放的内存分配
如何检测 C++ 框架中的资源泄漏
概述
资源泄漏是 C++ 框架中常见的错误,它会损坏内存并将程序置于不稳定状态。检测和修复这些泄漏至关重要,以维护代码的完整性。本文将指导您了解如何使用 VS Code 和 LLVM LeakSanitizer 检测和解决 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)