Comments 43
С Eclipse что-нибудь интегрируется?
Например, когда работаю с PyDev и подключен lint, анализ происходит на лету.
Такого для C++ нет?
Например, когда работаю с PyDev и подключен lint, анализ происходит на лету.
Такого для C++ нет?
Статья хорошая, но
Мне кажется, вы видели не все =)
имеем такие средства, как шаблоны и STL, превосходящие по уровню абстрактности все, что я когда-либо видел
Мне кажется, вы видели не все =)
не всегда вразумительные ошибки компилятора
тут автор наверно хотел сказать: «всегда невразумительные ошибки компилятора» (:
Вы не знаете, есть ли подобные опции и анализ в компиляторах Intel и Microsoft? Может быть вы сделаете серию статей и исследуете в них эту функциональность?
хорошая идея. почитаю ключи icc
достаточно доплатить ~5k$ за Visual Studio TeamSystem и ключик /analyze для cl.exe ваш :)
Хотя если вам не хочется делать таких пожертвований Майкрософту, то есть другой вполне легальный способ того как скачать этот анализатор.
А что вы имеете против использования std::vector?
Что я могу иметь против контейнера, который рекомендован для использования по умолчанию? А вот vector — странный он немного. Почитайте, например, вот тут: alenacpp.blogspot.com/2005/06/vector.html
у меня проблемы с цифрой 64, но обещаю посмотреть!
Теперь уже скорее про PVS-Studio :) — www.viva64.com/ru/pvs-studio/
Еще забыли про -Wconversion — клёвый флаг
А delete[] не для new[] никак не проверишь статическим анализом, для этого есть valgrind
А delete[] не для new[] никак не проверишь статическим анализом, для этого есть valgrind
большое спасибо. Я проглядел его мельком, думал, что он включен в -Wall. Ан нет!
Добавил в статью
Добавил в статью
Почему не проверишь?
Такое же легко можно проверить:
int * px = new int;
delete [] px;
Такое же легко можно проверить:
int * px = new int;
delete [] px;
ну да, простейшие случаи-то можно было бы и обрабатывать…
Ну как бы под статическим анализатором кода понимается попытка проверить и обработать как можно большее количество случаев. Если бы статически можно было определить всё, то уже давно бы существовала верификация кода для С++.
Собственно случай с delete/delete [] по сути ничем не отличается от выхода за пределы массива. Где-то мы можем обнаружить выход, а где-то нет, хотя он там на самом деле может быть.
Собственно случай с delete/delete [] по сути ничем не отличается от выхода за пределы массива. Где-то мы можем обнаружить выход, а где-то нет, хотя он там на самом деле может быть.
> = вместо == в if'ах
$ gcc -Wall test.c
int main(int argc, char* argv[]) {
if (argc = 1) return 1;
return 0;
}
$ gcc -Wall test.c
test.c: In function ‘main’:
test.c:2:3: warning: suggest parentheses around assignment used as truth value
анализ шаблонов есть где? :)
можно поконкретнее?
да хотя бы варнинги выдавать какой именно шаблон выбрался из нескольких (и почему другие не выбрались)
или правильно выдавать ошибки взаимосвязей шаблонов (например gcc часто тупо выдает вам ошибку на конец файла, и упоминает имя шаблона изза которого инстанциация не получилась, в таких случаях приходится долго курить код чтобы понять отчего инстанциация не удалась)
нормализатор шаблонов тоже бы пригодился (генерирует класс который получается в результате инстанцирования всех шаблонов)
и тд и тп…
или правильно выдавать ошибки взаимосвязей шаблонов (например gcc часто тупо выдает вам ошибку на конец файла, и упоминает имя шаблона изза которого инстанциация не получилась, в таких случаях приходится долго курить код чтобы понять отчего инстанциация не удалась)
нормализатор шаблонов тоже бы пригодился (генерирует класс который получается в результате инстанцирования всех шаблонов)
и тд и тп…
Simian гибко настраивается на игнорировани констант, типов прочего, что позволяет:
а) увидеть общий код (т.е. код, где алгоритмы очень похожи)
б) дрючить программеров за копипасты
а) увидеть общий код (т.е. код, где алгоритмы очень похожи)
б) дрючить программеров за копипасты
Со временем сюда можно будет добавить и анализатор из Clang'а, который уже в некотором роде поддерживает C/Obj-C и сейчас полным ходом идет работа над поддержкой С++. Apple добавила нативную поддержку анализатора в свой последний xcode и выглядит это теперь ну очень красиво (а главное удобно):
Ой зря вы забыли упомянуть PC-LINT, а ведь это самый мощный (если кто-то сможет это оспорить то я определенно узнаю что-то новое) инструмент
Тут есть Rational Software Analyzer в триале
www14.software.ibm.com/webapp/download/search.jsp?pn=Rational+Software+Analyzer
с интерфейсом Eclipse для различных Linux и Windows
Тут о нем кратко написано
www-01.ibm.com/software/awdtools/swanalyzer/developer/support/
(Enterprise редакция в основном дает возможность автоматического запуска стат. анализа)
А тут — полная документация он-лайн
www-01.ibm.com/support/docview.wss?rs=3352&uid=swg27012920
www14.software.ibm.com/webapp/download/search.jsp?pn=Rational+Software+Analyzer
с интерфейсом Eclipse для различных Linux и Windows
Тут о нем кратко написано
www-01.ibm.com/software/awdtools/swanalyzer/developer/support/
(Enterprise редакция в основном дает возможность автоматического запуска стат. анализа)
А тут — полная документация он-лайн
www-01.ibm.com/support/docview.wss?rs=3352&uid=swg27012920
Вы не подскажите как сказать gcc, чтоб он выводил warring-и связанные только с моим кодом?
Sign up to leave a comment.
Статический анализ кода C++