Обнаружение утечки памяти с помощью boundsChecker
Я определяю свой источник с помощью boundsChecker для обнаружения памяти, но когда я создаю его с помощью встроенного в C / C++ инструментария типа обнаружения ошибок, я получаю ошибки сборки. когда я вижу окно вывода, оно показывает NM2002: встроенное расширение (/Ob), используемое во время инструментария, эта ошибка..
но когда я выбираю тип инструмента в качестве анализа производительности или покрытия, источник строится успешно, но когда я запускаю тестовые сценарии для проверки утечек памяти, он не показывает утечек памяти... кто-нибудь может мне помочь в этом... также, пожалуйста, предложите мне, какой тип Инструментарий я должен использовать для обнаружения утечек памяти..
2 ответа
Что касается обнаружения утечек памяти, вам необходимо активировать подсистему "Отслеживание памяти". Он активирован по умолчанию. Однако он не отслеживает память, выделенную управляемым C/C++, только неуправляемым.
Не могли бы вы поделиться своим тестовым примером? Я один из разработчиков, поддерживающих продукт, и при необходимости мы можем заключить соглашение NDA.
Встраивание /Obn может привести к ошибкам инструментального кода, поскольку мы применяем код между этапами компиляции. Коду дается первый проход компиляции, и некоторый код может быть помечен для возможного встраивания. Затем мы добавляем все инструменты к промежуточному языку. Затем делается последний этап компиляции, и если они пытаются встроить код в инструментарий, могут произойти плохие вещи. Вот почему мы отключаем встраивание, если это возможно, и генерируем ошибку, если это необходимо.
Какую версию VS вы используете? Какая версия Devpartner?
Вам нужно будет скомпилировать с Обнаружение ошибок, чтобы поймать утечки памяти. Я бы посоветовал откомпилировать сборку Debug с отключенным встраиванием.
Редактировать Я только что провел несколько тестов с VS2008 и VS2010 и текущим кандидатом на выпуск 11.1
Я не получил ошибку а скорее
1> Инструментарий добавляет (/Ob0) для отключения встраивания 1>cl: Предупреждение командной строки D9025: переопределение '/Ob1' с помощью '/Ob0'
Предупреждение 1 предупреждение D9025: переопределение '/Ob1' с помощью '/Ob0' e:\cust\Anthony\Test\Test\cl Тест Предупреждение 2 предупреждение D9025: переопределение '/Ob1' с помощью '/Ob0' e:\cust\Anthony\Test\Test\cl Test
Эти сообщения говорят о том, что мы отключаем Inlining. Это будет иметь место только как ошибка, если вы будете рассматривать предупреждения как включенные ошибки.