Используя CppUnit для обнаружения утечки памяти

Не совсем ответ на ваш вопрос, но я думаю, что многие в конечном итоге будут искать «как установить цвет фона приложения».

В project/index.html установите класс тела на mat-app-background

<body class="mat-app-background">
  <app-root></app-root>
</body>

и убедитесь, что в project/angular.json у вас есть:

        "styles": [
          "./node_modules/@angular/material/prebuilt-themes/YOUR_STYLE.css",
          ...
        ],
5
задан Jeremy Mayhew 16 June 2009 в 13:47
поделиться

7 ответов

Если вы работаете в Linux, вы можете запускать свои тесты с помощью memcheck .

В разделе Client Requests руководства описывается несколько полезные макросы, один из которых отмечен как полезный для тестирования:

VALGRIND_COUNT_LEAKS : заполняет четыре аргумента количеством байтов памяти, обнаруженных при предыдущей проверке утечек, которые должны быть утечкой, сомнительными, достижимыми и подавленными. Опять же, полезен в коде тестовой оснастки после вызова VALGRIND_DO_LEAK_CHECK .

Макрос определен в memcheck.h (вероятно, в / usr / include / valgrind ), и желаемая последовательность будет напоминать

unsigned long base_definite, base_dubious, base_reachable, base_suppressed;
VALGRIND_DO_LEAK_CHECK;
VALGRIND_COUNT_LEAKS(base_definite, base_dubious, base_reachable, base_suppressed);
// maybe assert that they're zero!

// call test

unsigned long leaked, dubious, reachable, suppressed;
VALGRIND_DO_LEAK_CHECK;
VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed);
CPPUNIT_ASSERT_EQUAL(base_leaked, leaked);
// etc.

. Повторять это для каждого теста было бы непросто, поэтому вы можете написать собственные макросы или, что еще лучше, специализированный TestRunner .

4
ответ дан 13 December 2019 в 19:33
поделиться

CPPUNIT по умолчанию не поддерживает проверку на утечку памяти.

Проект был возобновлен (он был остановлен на долгое время), и это может быть особенностью CPPUNIT2, вы может предлагать (или писать) авторам.

Если вы ищете среду модульного тестирования с поддержкой обнаружения утечек памяти, вы можете попробовать CppUTest . Этот проект использовали Мартин Фаулер и Боб Мартин на некоторых курсах TDD. Довольно неплохо.

3
ответ дан 13 December 2019 в 19:33
поделиться

В Windows было бы довольно просто использовать некоторые вызовы кучи отладки, чтобы заставить CppUnit воздействовать на эту информацию с помощью _CrtMemCheckpoint () и _CrtMemDifference () :

Есть недостатки:

  • вам придется разместить что-то вручную в начале тест для получения контрольной точки (возможно, есть способ как-то интегрировать это в CppUnit)
  • это только Windows (вероятно, есть что-то похожее на различных других платформах)
  • он будет работать только для сборок с Debug CRT
2
ответ дан 13 December 2019 в 19:33
поделиться

Где я работаю, мы строим наши модульные тесты с помощью purify. Затем наша платформа непрерывной интеграции извлекает как количество успешных / неудачных тестов, так и количество пропущенных байтов (+ результаты lint и coverity) и показывает их на веб-странице. Я настоятельно рекомендую сделать это таким образом.

Извините за то, что не предоставил желаемое решение.

1
ответ дан 13 December 2019 в 19:33
поделиться

Понятия не имею, но вы можете использовать что-то вроде кода диспетчера памяти Fluid Studios и зацепить это в себе с помощью некоторой настройки. Либо это, либо скомпилируйте его в свое тестовое приложение, а затем получите сценарий, который запускает приложение один раз для каждого теста и сопоставляет результаты отслеживания памяти.

0
ответ дан 13 December 2019 в 19:33
поделиться

Запустите модульные тесты с помощью valgrind . Фреймворк модульного тестирования, который я использую, позволяет вам запускать один или несколько отдельных модульных тестов, чтобы вы могли определить, какой из них вызывает утечку.

0
ответ дан 13 December 2019 в 19:33
поделиться

Я знаю, что это не CppUnit, но boost :: test может обнаруживать утечки памяти.

Из http://www.boost.org/doc/libs/1_39_0/ libs / test / doc / html / execution-monitor / user-guide.html :

void detect_memory_leaks (bool on_off);

void break_memory_alloc (long mem_alloc_order_num);

0
ответ дан 13 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: