Вебинар: Go-Go-Gadg...Error? Смотрим, как ошибаются Go разработчики! - 26.08
На текущий момент доступно только для утилит pvs-studio-analyzer и PVS-Studio_Cmd.
Диагностическое логирование предназначено для быстрого сбора воспроизводимой информации о запуске анализатора: фактические параметры, окружение, результат выполнения, а также сведения о том, какие файлы были проанализированы или пропущены.
Результат сохраняется в виде структурированного лога (JSON), который удобен для чтения, автоматической обработки и передачи в техническую поддержку.
Если вы столкнулись с проблемами в работе анализатора (падениями, некорректными завершениями работы и прочими ситуациями, которые мешают вам использовать PVS-Studio), то при обращении в техническую поддержку стоит прикрепить полученные логи. Обратиться в техническую поддержку можно через форму на сайте.
Структурированный лог — текстовый файл, содержащий диагностическую информацию в формате JSON. Пригоден для машинной обработки.
Сырой лог — текстовый файл с промежуточной информацией, из которого формируется структурированный лог. Имеет суффикс *-raw.PVS-Studio.log. Не предназначен для использования при самостоятельной диагностике проблем.
Анализатор (frontend) — pvs-studio-analyzer (CompileCommandsAnalyzer) и PVS-Studio_Cmd;
Исполнитель (анализа; запускается анализатором) — pvs-studio.
Рекомендуется включать диагностическое логирование, если:
1) Запуск анализа с формированием структурированного лога:
# Для pvs-studio-analyzer (CompileCommandsAnalyzer):
pvs-studio-analyzer analyze <ваши_обычные_флаги_анализа> \
--enable-logging ./pvs-diag.json
# Для PVS-Studio_Cmd:
PVS-Studio_Cmd <ваши_обычные_флаги_анализа> \
--enable-logging ./pvs-diag.json
После выполнения появятся:
./pvs-diag.json;./*-raw.PVS-Studio.log.2) Если структурированный лог не сформировался (из-за какой-либо ошибки), то конвертацию можно запустить вручную:
pvs-diag-collector convert --input ./pvs-diag-raw.PVS-Studio.log \
--output ./pvs-diag.json
pvs-diag-collector или отправить в поддержку.--enable-logging <file_path> — обязательный флаг для включения логирования и сохранения структурированного JSON-лога в указанный файл.
Опции логирования
Опции задаются флагом --logging-options <option1,option2,...>. Значения передаются через запятую, без пробелов.
Корректно:
--logging-options skip-sensitive,dump-intermediate-files
Некорректно:
--logging-options skip-sensitive, dump-intermediate-files
Доступные опции:
|
N п/п |
Опция |
Описание |
|---|---|---|
|
1 |
|
Минимизирует и частично маскирует чувствительные данные в логах (например, значения переменных окружения и некоторые артефакты — в зависимости от сценария анализа) |
|
2 |
|
Сохраняет промежуточные файлы после анализа (например, препроцессированные |
|
3 |
|
Добавляет в структурированный лог расширенную информацию о выполненных запусках исполнителей (если они доступны в собранных данных) |
Примеры:
# Для pvs-studio-analyzer (CompileCommandsAnalyzer):
pvs-studio-analyzer analyze <ваши_обычные_флаги> \
--enable-logging ./pvs-diag.json \
--logging-options skip-sensitive,dump-intermediate-files,embed-runs
# Для PVS-Studio_Cmd:
PVS-Studio_Cmd <ваши_обычные_флаги> \
--enable-logging ./pvs-diag.json \
--logging-options skip-sensitive,dump-intermediate-files,embed-runs
pvs-diag-collector — это утилита для сбора/обработки логов и сопутствующих артефактов работы анализатора PVS-Studio.
Команда convert утилиты pvs-diag-collector преобразует сырой лог анализатора (*-raw.PVS-Studio.log) в структурированный.
При обычном сценарии работы эти действия выполняются анализатором автоматически.
Использование
pvs-diag-collector.exe convert [FILE] [-i <FILE>] [-o <FILE>]
[--embed-runs] [-j <NUM>]
Опции утилиты
|
N п/п |
Опция |
Описание |
|---|---|---|
|
1 |
|
Путь до входного сырого лога. |
|
2 |
|
Путь до выходного структурированного лога. Если опция не указана, то результат выводится в |
|
3 |
|
Добавляет в структурированный лог расширенную информацию о выполненных запусках исполнителей (если они доступны в собранных данных). |
|
4 |
|
Количество потоков (по умолчанию 1). При использовании без аргументов или со значением |
Примеры
# Вывод в файл с подробными сведениями о запусках исполнителей
pvs-diag-collector convert --input ./pvs-diag-raw.PVS-Studio.log \
--output ./pvs-diag.json \
-–embed-runs
# Вывод в файл
pvs-diag-collector convert --input ./pvs-diag-raw.PVS-Studio.log \
--output ./pvs-diag.json
# Вывод в консоль
pvs-diag-collector convert --input ./pvs-diag-raw.PVS-Studio.log
Коды возврата
0 — успех;1 — ошибка (также будет выведен текст ошибки).Ниже описаны основные поля и подсказки для типовых проблем. Полное описание всех полей находится в JSON schema (см. раздел про просмотр в редакторе).
Обычно полезно начать с:
basicPerformance — время и память;configuration — фактические настройки работы анализатора;environment — ОС/платформа/переменные окружения;input — фактические аргументы запуска, используемые настройки и конфигурации;output — код возврата, stdout/stderr, признаки проблем;runs — какие файлы анализировались/пропускались/завершились с ошибкой.utility — какая утилита сформировала лог, её версия и путь до неё.В процессе конвертации сырых логов анализаторов могут детектироваться "аномалии" — это подсказки о потенциальных проблемах (например, наличие вывода в stderr, неуспешные статусы, несоответствие версий и т.п.).
Их следует искать в output.anomalies.
Аномалия — не всегда ошибка, но почти всегда полезный сигнал для проверки и обращения к технической поддержке.
В данном разделе указаны типовые сценарии использования логирования и наиболее вероятные поля лога, на которые стоит обратить внимание.
Анализ завершился ошибкой / аварийно
output.returnCodeoutput.stderr и output.stdoutoutput.anomalies (если присутствуют)Файл не попал в анализ (пропущен)
runs.skipped[]runs.skipped[].sourceFilePathruns.skipped[].skipReasoninputНужно подтвердить фактическую конфигурацию запуска
input.argumentsconfigurationruns.executed[].stages.analysis.details разделы итоговой конфигурации в логах исполнителяПроблема с производительностью
basicPerformance.elapsedTimebasicPerformance.peakMemoryConsumptionСтруктурированный лог содержит поле $schema. Если редактор может получить JSON schema, он будет:
Рекомендуемый сценарий
$schema доступно (в корпоративной сети/интернете — согласно вашей политике). Если файл по указанной ссылке недоступен, то вы можете изменить ссылку на тот же файл в дистрибутиве анализатора.$schema ограничен корпоративной политикой, обычно помогает публикация схем на внутреннем артефакт-сервере (intranet) или установка схем локально с сопоставлением в настройках VS Code (параметр json.schemas). Также вы можете изменить ссылку на тот же файл в дистрибутиве анализатора.Ссылки на эти файлы вписываются в поле $schema каждого структурированного лога. Если по какой-то причине вы не можете получить к ним доступ локально, то можете воспользоваться ссылками ниже:
Диагностические логи могут содержать информацию, которая относится к конфиденциальной:
Если для вас критична передача такой информации, то рекомендуем использовать --logging-options skip-sensitive (минимизирует и частично маскирует чувствительные данные в логах), а также:
Рекомендуемый комплект:
*.json), указанный в --enable-logging;*.PVS-Studio.i), относящиеся к проблемному файлу (появятся после указания опции --dump-intermediate-files);*.PVS-Studio.cfg), относящиеся к проблемному файлу (появятся после указания опции --dump-intermediate-files);*.PVS-Studio.stacktrace.txt);Структурированный лог анализатора
Сохраняется точно по пути, который вы указали в --enable-logging.
Структурированный лог исполнителей
Не создаётся, встраивается в структурированный лог анализатора при указании опции embed-runs.
Сырой лог анализатора
Сохраняется в той же директории, что файл из --enable-logging, но с суффиксом *-raw.PVS-Studio.log.
Сырой лог исполнителя
Сырые логи исполнителей сохраняются рядом с анализируемыми исходными файлами. Их общий признак — имя файла заканчивается на *-raw.PVS-Studio.log.
Как найти все сырые логи в проекте
Linux/macOS (bash):
find <папка_проекта> -name '*-raw.PVS-Studio.log'
Windows PowerShell:
Get-ChildItem -Path <папка_проекта> -Recurse -Filter "*-raw.PVS-Studio.log"
Да, все файлы являются текстовыми. Вы можете открыть любой из них и посмотреть содержимое.
Найдите сырой лог анализатора рядом с путём --enable-logging.
Запустите конвертацию вручную:
pvs-diag-collector convert --input <путь_к_сырому_логу> --output ./pvs-diag.json
Если конвертация не удаётся — отправьте сырой лог в поддержку.
По умолчанию временные файлы и сырые логи удаляются по завершении анализа. Сырые логи сохраняются (не удаляются), если выполняется хотя бы одно из условий:
--logging-options dump-intermediate-files;Практическое следствие: даже при падении у вас, как правило, остаются сырые логи, которые можно сконвертировать или отправить в поддержку в исходном виде.
Да. Структурированный лог — валидный JSON, пригодный для парсинга.
Если нужно интегрировать конвертацию в пайплайн, используйте pvs-diag-collector convert и проверяйте код возврата (0/1).
Откройте JSON в VS Code: наличие $schema позволяет видеть подсказки по полям и допустимым значениям. Это ускоряет навигацию и снижает риск ошибок при интерпретации.