Rational Purify не показывает утечку памяти, ошибки времени выполнения? - PullRequest
0 голосов
/ 19 февраля 2010

Возможно, это не похоже на вопрос программирования, но по своей сути имеет дело с кодом.

У меня есть следующий фрагмент тестового кода, в котором есть очевидные ошибки, такие как индекс массива за пределами границ, утечка памяти: -

#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.) Добавлена ​​дополнительная опция компоновщика /fixed:no.

5.) Конфигурация сборки отлажена, оптимизация не включена.

Тогда я строю и получаю exe. Я использую этот exe для запуска в Purify, чтобы инструменты были такими же. Но окно вывода в cleany после запуска / установки этого exe-файла не показывает ошибок об утечке памяти, и т.д., которые присутствуют в приведенном выше коде.

Окно вывода cleany показывает выходные данные различных двоичных файлов (мой exe-файл и некоторые другие системные библиотеки), которые оно загрузило и выполнило. Но в выводе, где показаны данные о моем exe, нет сообщения об ошибке.

Мне кажется, что я ошибаюсь, задавая параметры компиляции / компоновщика при сборке исполняемого файла в MS-VS 2008. Или сгенерированный исполняемый формат не совместим / понят для Purify?

1.) Что здесь может быть не так? Какие еще варианты мне могут понадобиться при создании exe?

2.) Мой процесс использования Purify правильный или я что-то упустил? Как я могу заставить Purify показывать все ошибки в моей программе после выполнения анализа времени выполнения?

3.) Существует ли какой-либо другой инструмент (бесплатная / коммерческая лицензия), который может обнаруживать утечки памяти, массив ошибок, связанных с привязкой, использование неинициализированных указателей, переменных, повреждение памяти и т. Д., Выполняя анализ кода на C во время выполнения.

Извините за длинную почту, но должно было быть ясно.

спасибо.

-AD

1 Ответ

1 голос
/ 23 февраля 2010

После яростных попыток, прочитав в интернете, я узнал, что такое soln. за это

1) Добавить новую переменную среды как:

Имя = IBM_RATIONAL_PURIFY_ENABLE_SELECTIVE

Vale = 1

2) Помимо настроек проекта MS Visual Studio, о которых я упоминал в ОП, необходима настройка ниже -

C / C ++ -> Генерация кода = Библиотека времени выполнения -> Многопоточная отладка / MTd

И когда вы запускаете исполняемый файл в Cleany, вы должны нажать на Configure Selective, выбрать ваш exe.

Затем, когда вы запустите, он должен собрать необходимую информацию об ошибке.

-AD

...