Comments 19
Поздравляю вашу команду с успешным завершением столь серьёзного и интересного дела.
+15
Если правильно понял, теперь разработчики из EPIC будут использовать сами ваш анализатор?
+4
Когда уже Windows проверите, чтобы снять, так сказать, все вопросы?
+30
Читателям возможно будет интересно познакомиться с дискуссией на Reddit.
+4
Статический анализ конечно помогает, но касательно некоторого:
if (Token.TokenType == FBasicToken::TOKEN_Identifier ||Разве подобные вещи не обязаны генерировать warning еще на этапе компиляции? Неявный конверт int -> bool, уж тем более в логических операциях, и еще тем более в ленивой их версии — это же практически 100% ошибка.
FBasicToken::TOKEN_Guid) //<==
0
Подобное очень часто используется на практике и по делу. Пример:
Константа в конце — частое явление. Красиво это или нет, другой вопрос. Однако я часто видел такой код. Особенно он часто возникает в сложных макросах. Так что компилятор скован в решении таких тонких вопросов. Не до этого ему. :)
enum Mode { E_RELEASE = 0, E_DEBUG = 123 }; #define IS_DEBUG_ON E_DEBUG if (Foo() && E_DEBUG) WriteLog();
Константа в конце — частое явление. Красиво это или нет, другой вопрос. Однако я часто видел такой код. Особенно он часто возникает в сложных макросах. Так что компилятор скован в решении таких тонких вопросов. Не до этого ему. :)
0
А завтра кто-то решит написать E_RELEASE = 1, E_DEBUG = 0 или любую другую комбинацию и все поломается. То что код валидный с точки зрения компилятора я в курсе, я к тому что как-то кривовато это выглядит, и потенциальный источник ошибок.
0
Но ругаться нельзя. См «ужас-пример» ниже. :)
0
Мне кажется или пример должен выглядеть так:
И корректнее все же было бы:
enum Mode { E_RELEASE = 0, E_DEBUG = 123 };
#define IS_DEBUG_ON E_DEBUG
if (Foo() && IS_DEBUG_ON)
WriteLog();
И корректнее все же было бы:
if (Foo() && MODE==E_DEBUG)
WriteLog();
+1
Есть разница. Как должно выглядеть. И как есть на самом деле.
Компилятор вынужден не предупреждать о куда более страшных вещах, ибо понаписано масса работающего г-кода, и программисты будут удивлены и недовольны, если вдруг на такой код полезут предупреждения.
Классический пример. Компилятор Visual C++ промолчит на вот это даже с /Wall:
Хотя на самом деле надо рекомендовать приписать const:
Но компилятор молчит, ибо уже столько такого понаписали…
А ведь легко можно сделать беду:
И PVS-Studio знает и проводит более глубокий анализ, учитывая не одну строку, но и как используется указатель. И говорит:
V675 Writing into the read-only memory. consoleapplication1.cpp 123
Компилятор вынужден не предупреждать о куда более страшных вещах, ибо понаписано масса работающего г-кода, и программисты будут удивлены и недовольны, если вдруг на такой код полезут предупреждения.
Классический пример. Компилятор Visual C++ промолчит на вот это даже с /Wall:
char *p = "string";
Хотя на самом деле надо рекомендовать приписать const:
const char *p = "string";
Но компилятор молчит, ибо уже столько такого понаписали…
А ведь легко можно сделать беду:
void f() { char *p = "string"; *p = 1; }
И PVS-Studio знает и проводит более глубокий анализ, учитывая не одну строку, но и как используется указатель. И говорит:
V675 Writing into the read-only memory. consoleapplication1.cpp 123
+1
А есть подобный анализатор для C#?
0
Есть (в смысле, вообще в мире): en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#.NET
А ещё мы морально готовимся начать создавать свой собственный анализатор для C#.
А ещё мы морально готовимся начать создавать свой собственный анализатор для C#.
0
В будущем — да. В настоящем от нас — пока нет.
0
Проверьте пожалуйста Unity. Я думаю у вас получится с ними договориться, особенно после этого поста.
0
«Некрокомментинг». Позволю себе выдержку из заметки "PVS-Studio 7.04". Возможно, кому-то это будет интересно и пригодится.
Анализ Unreal Engine проектов
В плагине PVS-Studio для Visual Studio была добавлена опция AutoloadUnrealEngineLog, включение которой позволяет автоматически загружать отчёт анализатора в окно вывода PVS-Studio после прохождения анализа. Без этой опции загрузку лога необходимо делать вручную через меню плагина.
Также в разделе документации "Проверка Unreal Engine проектов" были описаны изменения стандартных сборочных скриптов, которые позволят проводить сборку и анализ в одно действие. Без модификации скриптов (при добавлении флага -StaticAnalyzer=PVSStudio к аргументам запуска) проводится только анализ проекта, без выполнения его сборки.
Анализ Unreal Engine проектов
В плагине PVS-Studio для Visual Studio была добавлена опция AutoloadUnrealEngineLog, включение которой позволяет автоматически загружать отчёт анализатора в окно вывода PVS-Studio после прохождения анализа. Без этой опции загрузку лога необходимо делать вручную через меню плагина.
Также в разделе документации "Проверка Unreal Engine проектов" были описаны изменения стандартных сборочных скриптов, которые позволят проводить сборку и анализ в одно действие. Без модификации скриптов (при добавлении флага -StaticAnalyzer=PVSStudio к аргументам запуска) проводится только анализ проекта, без выполнения его сборки.
0
Sign up to leave a comment.
Как команда PVS-Studio улучшила код Unreal Engine