Возможно, это не похоже на вопрос программирования, но по своей сути имеет дело с кодом.
У меня есть следующий фрагмент тестового кода, в котором есть очевидные ошибки, такие как индекс массива за пределами границ, утечка памяти: -
#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