Rational Purify не показывает утечку памяти и ошибки времени выполнения?
-
21-09-2019 - |
Вопрос
Возможно, это не похоже на вопрос программирования, но по своей сути он касается кода.
У меня есть следующий фрагмент тестового кода, в котором есть очевидные ошибки, такие как выход индекса массива за пределы, утечка памяти: -
#include "stdio.h"
#include "stdlib.h"
main()
{
int i;
char *ptr;
ptr = (char*)malloc(5);
for(i=0;i<10;i++)
{
ptr[i]=(char)i;
}
}
Этот код создан на базе MS-Visual Studio 2008.
Я пытаюсь использовать Rational Purify (версия 7.0) для выявления ошибок во время выполнения и утечек памяти в моем коде.Прочитав несколько указаний о том, как создать код для использования в Purify, я сделал следующие действия в настройках проекта MSVS-2008:
1.) Отключить инкрементную ссылку. 2.) Флаг компилятора отладочной информации — /Zi.
3.) Установите для параметра компоновщика значение «Базовая проверка во время выполнения» по умолчанию.
4.) Добавлена дополнительная опция компоновщика /исправлено:нет.
5.) Конфигурация сборки отладочная, оптимизация не включена.
Затем я собираю и получаю exe.Я использую этот exe-файл для запуска в Purify, чтобы он работал одинаково.Но окно вывода в Purify после запуска/инструментирования этого exe-файла не показывает ошибок, связанных с утечкой памяти и т. д., которые присутствуют в приведенном выше коде.
В окне вывода Purify показаны выходные данные различных двоичных файлов (мой exe-файл и некоторые другие системные библиотеки), которые он загрузил и выполнил.Но в выводе, где показаны данные о моем exe, сообщения об ошибке нет.
У меня такое ощущение, что я совершаю ошибку, указывая параметры компиляции/компоновки при сборке exe-файла в MS-VS 2008. Или сгенерированный формат исполняемого файла несовместим/непонятен для Purify?
1.) Что здесь может быть не так?Какие еще опции мне могут понадобиться при создании exe?
2.) Правильно ли я использую Purify или я что-то упускаю?Как я могу заставить Purify отображать все ошибки в моей программе после анализа времени выполнения?
3.) Есть ли какой-либо другой инструмент (бесплатная/коммерческая лицензия), который может обнаруживать утечки памяти, ошибки выхода массива, использование неинициализированных указателей, переменных, повреждение памяти и т. д.путем выполнения анализа кода C во время выполнения.
Извините за длинное письмо, но нужно было внести ясность.
Спасибо.
-ОБЪЯВЛЕНИЕ
Решение
Яростно перепробовав множество вещей, читая в Интернете, я обнаружил соль.для этого
1) Добавьте новую переменную среды как:
Имя = IBM_RATIONAL_PURIFY_ENABLE_SELECTIVE
Вале = 1
2) Помимо настроек проекта MS Visual Studio, которые я упомянул в ОП, необходимы следующие настройки:
C/C++ -> Генерация кода = Библиотека времени выполнения -> Многопоточная отладка /MTd
И когда вы запускаете исполняемый файл в Purify, вам нужно нажать «Настроить выборочную» и выбрать свой exe.
Затем, когда вы запустите, он должен собрать необходимую информацию, связанную с ошибками.
-ОБЪЯВЛЕНИЕ