FxCop (или эквивалентный) для кода non-.Net C ++

Существует ли способ заставить FxCop анализировать неуправляемый код C++? Установка флага сброса / позволила FxCop открывать .exe. Это находит МНОГО объектов C++, но анализ кода очень слаб. Например, следующий код был пропущен:


int i=0;
if (i=2) printf("Don't worry..everything will be okay.");

Я хотел бы инструмент, который может поймать i=2 и предупредите, что это должно быть i==2. Совет или относительно того, чтобы заставлять FxCop быть более полным или относительно другой инструмент, который другие нашли полезным?

6
задан User1 10 February 2010 в 00:32
поделиться

2 ответа

MSVC (по крайней мере, VC9 / VS2008) уже предупреждает о вашем конкретном примере:

warning C4706: assignment within conditional expression

(К сожалению, я только что понял, что мои настройки тестовых проектов проверены до уровня предупреждения 4 - / W4. MSVC не выдает это предупреждение при настройке по умолчанию). Так что установите настройки проекта на / W4 и получите больше диагностики (надеюсь, без лишнего шума).

Я считаю, что предупреждения в VC9 довольно приличны, и вы можете легко настроить компилятор так, чтобы они воспринимались как ошибки, если вы хотите вызвать проблему.

Версия Visual Studio для Team Server содержит поддержку PREfast - инструмента статического анализа от Microsoft (опция находится в разделе Advanced / Enable Code Analysis For C / C ++ проекта C ++). Вы также можете получить этот инструмент в Windows Driver Kit и / или Windows SDK, хотя я не могу поручиться за инструкции по интеграции версии WDK / SDK в Visual Studio:

Другой любимой альтернативой (платной) является продукт PC-Lint Gimpel .

4
ответ дан 17 December 2019 в 07:04
поделиться

java.lang.ClassNotFoundException означает проблемы CLASSPATH. Отсутствие подсказки означает, что вы предполагаете, что CLASSPATH установлен правильно, но это не так.

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

Если вы строите с помощью Ant, убедитесь, что видите что-то подобное в файле build.xml:

<path id="production.class.path">
    <pathelement location="${production.classes}"/>
    <pathelement location="${production.resources}"/>
    <fileset dir="${production.lib}">
        <include name="**/*.jar"/>
        <exclude name="**/junit*.jar"/>
        <exclude name="**/*test*.jar"/>
    </fileset>
</path>

UPDATE: Либо у вас нет JAVA_HOME/bin в PATH, либо вы загрузили JRE вместо JDK. Проверьте каталог, в котором установлена Java, и проверьте, есть ли в каталоге/bin файл javac.exe. Если у вас нет/bin, загрузите JDK и установите его.

Если у вас есть файл/bin с javac.exe, проверьте PATH, чтобы убедиться, что каталог Java/bin находится в PATH. После его установки откройте командную оболочку и введите «javac -version», чтобы убедиться, что все хорошо.

Какой JDK вы сказали Eclipse использовать?

-121--1162768-

С помощью ответа Джона Бокера можно сделать что-то вроде следующего:

List<double?> mylist = new List<double?>();
int nullItemsCount = mylist.Count(item => !item.HasValue);
-121--4667580-

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

0
ответ дан 17 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: