Существует ли способ заставить FxCop анализировать неуправляемый код C++? Установка флага сброса / позволила FxCop открывать .exe. Это находит МНОГО объектов C++, но анализ кода очень слаб. Например, следующий код был пропущен:
int i=0;
if (i=2) printf("Don't worry..everything will be okay.");
Я хотел бы инструмент, который может поймать i=2
и предупредите, что это должно быть i==2
. Совет или относительно того, чтобы заставлять FxCop быть более полным или относительно другой инструмент, который другие нашли полезным?
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 .
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- мы используем покрывало, не свободное, но потрясающий инструмент статического анализа