Я установил scan-build / clang версии 2.9 на рабочий стол Ubuntu. Я собираю там свой исходный код на C ++ с помощью make. Как было сказано, scan-build проанализирует проект, созданный с использованием make, если вы дадите

scan-build make 

К

Но после заставки я вижу сообщение

scan-build: Removing '/tmp/scan-build-2013-10-16-1' because it contains no reports.

Также пробовал

scan-build --use-c++=/use/bin/clang++ make

Q1 - Что я здесь делаю не так / не хватает? Как использовать сканирование-сборку для анализа всех исходных файлов.

Q2 - Есть ли возможность использовать clang++ --analyze myfile.cpp для анализа единого исходного файла. Но он выдает ошибку о том, что файл заголовка включен, не найдена «фатальная» ошибка «my.h»

Какова возможность clang analysis, чтобы указать на папку, содержащую файлы заголовков.

12
goldenmean 16 Окт 2013 в 18:00

1 ответ

Лучший ответ

Что касается Q2, вы должны иметь возможность использовать:

scan-build clang++ -c myfile.cpp

Или что вы предложили:

clang++ --analyze myfile.cpp

Но вам нужно убедиться, что компилятор знает обо всех включениях и библиотеках (вы сможете успешно скомпилировать myfile.cpp в объектный файл без анализа). Это особенно касается каталогов -I.

Также существует опция -o для scan-build, которая указывает целевой каталог для файлов отчетов HTML. Подкаталоги будут созданы по мере необходимости для представления отдельных «запусков» анализатора. Если этот параметр не указан, в /tmp создается каталог для хранения отчетов, как вы уже знаете.

Другой полезный вариант - -v (подробный), который должен выводить все ошибки, с которыми может столкнуться анализатор.

И последнее, но не менее важное: вы должны использовать анализ с отладочными сборками, где оптимизация отключена, но, что более важно, где символы не удалены.

Не уверен, поможет ли это, дайте мне знать ...

7
the swine 17 Окт 2016 в 12:52
Спасибо, я пропустил этот вариант. Это помогло.
 – 
goldenmean
7 Ноя 2013 в 17:56
Однако я должен упомянуть, что "scan-build clang ++ -c myfile.cpp" не статически анализирует файл, а компилирует, строит и связывает его.
 – 
goldenmean
7 Ноя 2013 в 18:27
Если файл cpp включает заголовки, он выдает ошибку «файл не найден». Есть ли простой способ добавить файлы заголовков?
 – 
Eray Tuncer
17 Окт 2016 в 12:30
Ээх, вы имеете в виду использование -I?
 – 
the swine
17 Окт 2016 в 12:51
1
Он указывает путь для поиска включаемых файлов. Поэтому вместо файлов вы должны указать папку, в которой находятся ваши заголовки. Фактически, если вы можете скомпилировать его с помощью clang или g++, опция -I будет точно такой же.
 – 
the swine
18 Окт 2016 в 15:53