Обнаружение утечек памяти в приложении C ++ с VS Code - PullRequest
3 голосов
/ 26 января 2020

Есть ли способ показать отчет об утечках памяти в приложении C ++ с использованием кода Visual Studio?

Возможно, определенная библиотека? Расширение? Использование компилятора MinGW?

Я использую код Visual Studio (1.41.1) на Windows 10 с расширением C ++ (0.26.3). Я настроил VS Code с набором инструментов компилятора MSV C (2019), как написано в Настройка VS Code для Microsoft C ++ . Однако я не могу показать утечки памяти с помощью библиотеки CRT, как написано в Найти утечки памяти с помощью библиотеки CRT . Мой простой пример кода:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <iostream>

int main() {
    printf("Hello world!\n");

    int *a = new int;
    *a = 8;
    //delete a;

    _CrtDumpMemoryLeaks();
    return 0;
}

Используя этот код, я не вижу ни одного отчета, сгенерированного _CrtDumpMemoryLeaks(). При отладке кода кажется, что компилятор полностью пропускает строку _CrtDumpMemoryLeaks();. Я делаю что-то неправильно? Я попытался изменить конфигурации с помощью _DEBUG=1 define, однако компилятор даже пропускает оператор #ifdef _DEBUG.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Похоже, что утечки памяти можно найти в приложении VS Code C ++ с MSV C, просто добавив параметр компилятора "/MDd" или "/MTd" в массив args файла tasks.json внутри * проекта Папка 1005 * (без стороннего приложения или инструмента). Примерно так:

"args": [
            "/Zi", // Generates complete debugging information
            "/MDd", // Use /MDd or /MTd to define _DEBUG and allow _CrtDumpMemoryLeaks()
            "/EHsc", // Specifies the model of exception handling - mode 'sc'
            "/Fe:", // Renames the executable file
            "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "${file}"
        ],

Это в основном включает все, что перечислено в Поиск утечек памяти с помощью библиотеки CRT Затем при запуске программы _CrtDumpMemoryLeaks() обнаруживает утечки памяти и показывает их в DEBUG CONSOLE:

Detected memory leaks!
Dumping objects ->
{113} normal block at 0x015C8460, 4 bytes long.
 Data: <    > 08 00 00 00 
Object dump complete.

Наконец, вы можете ввести число в фигурных скобках в команду _CrtSetBreakAlloc(113), чтобы создать точку останова для выделения памяти, чтобы найти переменную, которую вы забыли удалить.

0 голосов
/ 26 января 2020

1) Используйте Deleaker , это платный профилировщик, в настоящее время предоставляется 15-дневная пробная версия.

2) Альтернативой является инструмент Визуальный детектор утечек , доступный для установки. на VS.

Следовательно, Stack Community всегда готов помочь с подобным вопросом, заданным ранее

( Как найти утечку памяти в коде / проекте C ++? )

...