Viva64: статический анализатор кода, специализирующийся на проблемах 64-х битного кода

Некоторое время назад (довольно давно, откровенно говоря) меня попросили написать про Viva64, но я это дело как-то проволынил. Просто написать, что «есть такая штука, а дальше разбирайтесь сами» не хотелось, а руки до поставить и попробовать не доходили. Теперь, как вы понимаете, дошли, - теперь можно делиться впечатлениями.

Прежде всего, имеет смысл начать не с установки анализатора, а с прочтения статьи «20 issues of porting C++ code on the 64-bit platform». В статье объясняется, чем 64-х битные платформы отличаются от привычного x86 и перечисляются наиболее типичные проблемы портирования 32-х битного кода на 64-х битную платформу. Нетрудно догадаться, что статья писалась не просто так, а как замаскированное описание возможностей Viva64. Но её полезность от этого не страдает.

Кстати, статья написана по вполне русском английским, так что проблем с чтением возникнуть не должно. :-)

Вернёмся к самой программе. Анализатор интегрируется в Visual Studio 2005 и не требует особой настройки. После запуска студии обнаруживается новое меню и панель инструментов.

Viva64

Меню позволяет выполнять анализ текущего файла, текущего проекта и всего solution. Результаты анализа выводятся в окна «Error list»/«Output» - точно также как и при обычной сборке.

Viva64

Вместе с Viva64 поставляется тестовый проект, демонстрирующий примеры ошибок, обнаруживаемых анализатором. Программа позволяет сохранить отчет о найденных проблемах и загрузить его позднее. Это должно быть особенно полезно при работе с большим проектам, так как позволяет сэкономить время на повторном анализе кода.

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

Стоит ли усилия Viva64 потраченного процессорного времени и памяти? По всей видимости – да. Количество предупреждений о найденных проблемах может превысить все ожидания. Для примера я попробовал проанализировать исходный код notepad2, 64-х битную сборку которого я вполне успешно использую в повседневной работе. Скажу заранее, что я ожидал довольно большое количество ошибок – код notepad2 не слишком хорош, с точки зрения переноса на 64-х битную платформу. Количество полученных предупреждений удивило – 2103 штуки. Много.

К сожалению, большое количество сообщений об ошибках может стать проблемой само по себе. Viva64 не ранжирует найденные ошибки по степени их серьёзности, хотя это очень было бы кстати. Далеко не все обнаруженные ошибки фатальны, а многие вообще никогда не проявятся в реальном приложении из-за того, например, что значение переменной никогда не превысит опасного порога. 64-х битная версия того же notepad2 прекрасно работает, не смотря на 2103 предупреждения. Естественно это не означает, что в коде нет ошибок. Они наверняка проявят себя при серьезных нагрузках. Но это не означает, что в коде скрывается две тысячи ошибок. В лучшем случае их там несколько десятков.

Из других вещей, отсутствующих в Viva64 могу упомянуть:

Ещё масса всяких полезных мелочей в голове крутилась, но как всегда, когда дело доходит до бумаги, они куда-то выветрились.

Впрочем, не смотря на длинный список недостатков, Viva64 стоит того, чтобы попробовать её в работе. Тем более, что с основной работой по собственно обнаружению проблем она справляется неплохо.

comments powered by Disqus