Как я могу создать файл с информацией, сгенерированной _CrtDumpMemoryLeaks ⇐ C++
-
Гость
Как я могу создать файл с информацией, сгенерированной _CrtDumpMemoryLeaks
Я пытаюсь реализовать создание файла журнала на основе инструментов отладки CRT, до сих пор я специально создал простой файл с некоторыми утечками, просто чтобы посмотреть, как он работает.
#include "OtherSource.h" #include #include int Simulation::SimulateLeak() { #ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif int* offset_x = DBG_NEW int; int* offset_y = DBG_NEW int; if (offset_x == NULL || offset_y == NULL) { возврат 1; } *offset_x = 10; *offset_y = 20; удалить offset_x; #ifdef _DEBUG _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG); _CrtDumpMemoryLeaks(); #endif вернуть 0; } Затем я попробовал то, что мне показалось простым: создать файл, получить информацию об утечке памяти и записать в него информацию, даже CRT предлагает что-то под названием _CrtSetReportFile()
поэтому я попытался что-то реализовать с его помощью
#include "OtherSource.h" #include #include int Simulation::SimulateLeak() { #ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif // Устанавливаем файл, в который должен поместиться отчет ФАЙЛ* LeakReportFile = fopen("MemoryLeakReport.txt", "w"); _CrtSetReportFile(_CRT_WARN, LeakReportFile); int* offset_x = DBG_NEW int; int* offset_y = DBG_NEW int; if (offset_x == NULL || offset_y == NULL) { возврат 1; } *offset_x = 10; *offset_y = 20; удалить offset_x; #ifdef _DEBUG _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG); _CrtDumpMemoryLeaks(); #endif // Закрываем файл после дампа утечек памяти fclose(leakReportFile); вернуть 0; } Файл действительно создан, но даже несмотря на то, что в выводе возникают утечки памяти
Обнаружены утечки памяти! Сброс объектов -> C:\C++\CRTDebugTest\CRTDebugTest\Source.cpp(10) : {183} обычный блок по адресу 0x000002CEAFE21FF0, длиной 4 байта. Данные: 28 00 00 00 C:\C++\CRTDebugTest\CRTDebugTest\OtherSource.cpp(29) : {181} обычный блок по адресу 0x000002CEAFE22570, длина 4 байта. Данные: < > 14 00 00 00 C:\C++\CRTDebugTest\CRTDebugTest\OtherSource.cpp(28) : {180} обычный блок по адресу 0x000002CEAFE21BF0, длина 4 байта. Данные: < > 0A 00 00 00 Дамп объекта завершен. Мой файл пуст. Что я делаю не так или чего не хватает? Пожалуйста, помогите
Я пытаюсь реализовать создание файла журнала на основе инструментов отладки CRT, до сих пор я специально создал простой файл с некоторыми утечками, просто чтобы посмотреть, как он работает.
#include "OtherSource.h" #include #include int Simulation::SimulateLeak() { #ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif int* offset_x = DBG_NEW int; int* offset_y = DBG_NEW int; if (offset_x == NULL || offset_y == NULL) { возврат 1; } *offset_x = 10; *offset_y = 20; удалить offset_x; #ifdef _DEBUG _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG); _CrtDumpMemoryLeaks(); #endif вернуть 0; } Затем я попробовал то, что мне показалось простым: создать файл, получить информацию об утечке памяти и записать в него информацию, даже CRT предлагает что-то под названием _CrtSetReportFile()
поэтому я попытался что-то реализовать с его помощью
#include "OtherSource.h" #include #include int Simulation::SimulateLeak() { #ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif // Устанавливаем файл, в который должен поместиться отчет ФАЙЛ* LeakReportFile = fopen("MemoryLeakReport.txt", "w"); _CrtSetReportFile(_CRT_WARN, LeakReportFile); int* offset_x = DBG_NEW int; int* offset_y = DBG_NEW int; if (offset_x == NULL || offset_y == NULL) { возврат 1; } *offset_x = 10; *offset_y = 20; удалить offset_x; #ifdef _DEBUG _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG); _CrtDumpMemoryLeaks(); #endif // Закрываем файл после дампа утечек памяти fclose(leakReportFile); вернуть 0; } Файл действительно создан, но даже несмотря на то, что в выводе возникают утечки памяти
Обнаружены утечки памяти! Сброс объектов -> C:\C++\CRTDebugTest\CRTDebugTest\Source.cpp(10) : {183} обычный блок по адресу 0x000002CEAFE21FF0, длиной 4 байта. Данные: 28 00 00 00 C:\C++\CRTDebugTest\CRTDebugTest\OtherSource.cpp(29) : {181} обычный блок по адресу 0x000002CEAFE22570, длина 4 байта. Данные: < > 14 00 00 00 C:\C++\CRTDebugTest\CRTDebugTest\OtherSource.cpp(28) : {180} обычный блок по адресу 0x000002CEAFE21BF0, длина 4 байта. Данные: < > 0A 00 00 00 Дамп объекта завершен. Мой файл пуст. Что я делаю не так или чего не хватает? Пожалуйста, помогите
Мобильная версия