Как найти неиспользуемые атрибуты / методы в Visual C ++ 2008 - PullRequest
9 голосов
/ 29 сентября 2008

Есть ли способ идентифицировать неиспользуемые атрибуты / методы в Visual C ++ 2008 Professional? Если это невозможно по умолчанию, рекомендации сторонних инструментов также приветствуются.

Спасибо
Флориан

Редактировать: nDepend работает только для сборок .NET. Я ищу что-то, что можно использовать с родными приложениями C ++.

Ответы [ 6 ]

6 голосов
/ 30 сентября 2008

Попробуйте PC-Lint . Это очень хорошо в поиске избыточного кода. Я еще не пробовал версию 9. Версия 8 требует некоторого времени для настройки. Попробуйте интерактивную интерактивную демонстрацию.

0 голосов
/ 14 мая 2009

PC-Lint очень мощный, но трудно налегать. Конечно, это довольно хорошо описывает C и C ++, не так ли?

Еще один инструмент, который я считаю превосходным, - это Visual Assist X от Whole Tomato, который интегрируется прямо в IDE.

В C ++ есть несколько важных ошибок при поиске кода, на который нет ссылок: шаблоны, обратные вызовы и обработчики сообщений могут иметь решающее значение для вашего проекта, но никогда не вызываться напрямую. Например, обработчик для потока не вызывается напрямую, а является параметром при создании нового потока. Сообщения типа «On_buttonpress» в проектах MFC или WTL также будут отображаться как не вызываемые методы.

Как только вы их найдете, вы можете настроить PC-Lint так, чтобы они игнорировались, но в первый раз вы проделали большую работу.

0 голосов
/ 30 сентября 2008

Coverage Validator может отображать неиспользуемый код C ++ (но не атрибуты). Он делает это динамически, поэтому вы должны «напрячь» приложение, чтобы получить результаты: http://successfulsoftware.net/2008/03/10/coverage-validator/

0 голосов
/ 30 сентября 2008

Хитрость в том, что многие функции в C ++ должны существовать, даже если они не вызываются. Повышение особенно вызовет это, но даже обычный код STL может сделать это. И ваш код должен соответствовать. Вы можете определить копию ctor, потому что формально это требуется для std :: vector. Но если вы не создадите экземпляр какого-либо члена std :: vector, который действительно копирует T, ваш ctor копии останется неиспользованным.

Даже если они не обязаны, они часто существуют для безопасности. Например, объявление конструктора частной копии может предотвратить непреднамеренное копирование объекта. Без частного объявления компилятор определит для вас общедоступную копию для каждого члена. Теперь, это "неиспользованный", и вы хотите, чтобы о них предупреждали?

0 голосов
/ 30 сентября 2008

Я лично не использовал их инструменты для повышения производительности (я использую их костюм для управления окнами), но, похоже, у DevExpress есть C ++ refactor'er под названием Refactor! для C ++ . Я не сразу заметил функции, которые вы ищете, но, может быть, они есть?

0 голосов
/ 29 сентября 2008

nDepend сделает это вместе с уборкой вашего дома и прогулкой с собакой. Есть бесплатная версия.

Следующая инструкция языка запроса кода даст вам список неиспользуемых методов

 WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE MethodCa == 0 AND 
   !IsPublic AND !IsEntryPoint AND !IsExplicitInterfaceImpl AND 
   !IsClassConstructor AND !IsFinalizer
...