Я хочу использовать frama-c для статического анализа кода C. Мне уже потребовалось некоторое время, чтобы установить его (надеюсь) правильно. Файлы находятся по адресу C:\CodeAnalysis\frama-c
. Я хочу, чтобы применить его с помощью консоли Windows, например:пытается сделать работу frama-c на Windows 7, используя Perl или MinGW или
C:\CodeAnalysis\frama-c\bin\frama-c hello.c
hello.c только простой привет-мир-программа (я нет C программист кстати и новичок в программировании)
#include <stdio.h>
main()
{
printf("Hello World \n");
}
Так при выполнении указанной выше команды есть следующий вывод:
[kernel] preprocessing with "gcc -C -E -I. hello.c"
C:/Strawberry/c/x86_64-w64-mingw32/include/stdio.h:141:[kernel] user error: syntax error
[kernel] user error: skipping file "hello.c" that has errors.
[kernel] Frama-C aborted: invalid user input
Да, у меня установлен Perl, но понятия не имею, почему Frama использует его. Мне кажется, что что-то не так с stdio.h
. Может ли это быть? Но я могу успешно скомпилировать свою программу.
C:\Strawberry\c\bin\gcc hello.c
производит хорошо работающий файл exe.
При удалении оператора включить из файла, есть следующий вывод:
[kernel] preprocessing with "gcc -C -E I. hello.c"
hello.c:5:[kernel] warning: Calling undeclared function printf. Old style K&R code?
Так Frama себе делает работу, и это своего рода выход я ожидал получить.
Я также установил MinGW и попытался использовать Frama для компиляции. Поэтому я удалил записи Strawberry на моем пути к Windows. После этого вызов frama-c производит одинаковый вывод.
Когда полностью удаляется Strawberry Perl, frama не работает (указывая gcc - неизвестная команда), хотя C:\MinGW\mingw64\bin
также добавлен в мой путь к Windows, даже в качестве первой записи.
C:\MinGW\mingw64\bin\gcc hello.c
работ, gcc hello.c
нет.
Когда установлен Perl gcc hello.c
работает, даже когда я удаляю части клубники из переменной пути Windows. WTF?
Как я могу заставить все работать правильно?
Не могли бы вы уточнить, какую версию Frama-C вы используете? Для более старых версий необходимо использовать что-то вроде «-cpp-extra-args =» - I path/to/frama-c/share », чтобы использовать собственный stdlib Frama-C, иначе он будет по умолчанию версией системы, что приведет к поведение, которое вы наблюдали. – anol
Для информации есть [обновленные инструкции по установке] (https://bts.frama-c.com/dokuwiki/doku.php?id=mantis:frama-c:compiling_from_sourcecompilation_steps) для Windows, которые должны разрешать использование новой версии Frama -C, которые будут установлены. Тем не менее, им требуются некоторые знания о средствах командной строки, и сама Frama-C требует некоторого опыта, чтобы предоставить пользователю полезную обратную связь. Это дает некоторые мощные анализы, но это не инструмент начального уровня. Новички на C могут предпочесть другие инструменты, такие как [AddressSanitizer] (https://en.wikipedia.org/wiki/AddressSanitizer) или Valgrind. – anol