Знакомство со статичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ PVS-Studio ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ C++ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² срСдС Linux

Знакомство со статичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ PVS-Studio ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ C++ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² срСдС LinuxPVS-Studio ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° языках C, C++, C# ΠΈ Java. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ систСмами Windows, Linux ΠΈ macOS. Π’ этой Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ΅ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ± Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠ΄Π°, написанного Π½Π° C ΠΈ C++ Π² срСдС Linux.

Установка

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ PVS-Studio ΠΏΠΎΠ΄ Linux ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами, Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° дистрибутива. НаиболСС ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ способ – использованиС рСпозитория: Ρ‚Π°ΠΊ это позволяСт автоматичСски ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π½ΠΎΠ²Ρ‹Ρ… вСрсий. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ установочный ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ здСсь.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ для установки, зависят ΠΎΡ‚ дистрибутива Linux, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅. НапримСр, для систСм, основанных Π½Π° Debian, установка ΠΈΠ· рСпозитория выглядит Ρ‚Π°ΠΊ:

wget -q -O - https://files.viva64.com/etc/pubkey.txt | sudo apt-key add -

sudo wget -O /etc/apt/sources.list.d/viva64.list 
https://files.viva64.com/etc/viva64.list

sudo apt update
sudo apt install pvs-studio

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ PVS-Studio ΠΈΠ· установочного ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ gdebi:

sudo gdebi pvs-studio-VERSION.deb

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ процСсс установки описан Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ PVS-Studio Π² Linux» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π’Π°ΠΌ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ систСмах, Π½Π΅ основанных Π½Π° Debian.

ПослС установки Π½ΡƒΠΆΠ½ΠΎ ввСсти Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°

pvs-studio-analyzer credentials NAME KEY [-o LIC-FILE]

Π“Π΄Π΅ NAME ΠΈ KEY – имя, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ зарСгистрирована лицСнзия, ΠΈ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –o позволяСт Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирован Ρ„Π°ΠΉΠ» Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ хранится Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ~/.config/PVS-Studio/.

Π’Ρ€ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° страницС «Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ PVS-Studio«.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²

ПослС установки Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Для этого ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° основных способа:

  1. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ компиляции;
  2. Запуск Π² процСссС сборки нСпосрСдствСнно ΠΈΠ· сборочной систСмы.

Рассмотрим сначала ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ способ. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΠΎΠ΄ Linux, понадобится ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° strace. Анализатор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π΅ для сбора ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ процСссы Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΈΡΡŒ Π²ΠΎ врСмя сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Запуск производится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

pvs-studio-analyzer trace -- make

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сборка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ make, Π½ΠΎ Π½Π° мСстС Π²Ρ‹Π·ΠΎΠ²Π° make ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ любая другая ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ сборку. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π² Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом.

ПослС сборки strace создаст Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ исходного ΠΊΠΎΠ΄Π°. Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ

pvs-studio-analyzer analyze -o /path/to/project.log

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ получится Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ². Π Π°Π±ΠΎΡ‚Ρƒ с ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ ΠΌΡ‹ рассмотрим Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

ΠšΡ€ΠΎΠΌΠ΅ использования strace, Π°Π½Π°Π»ΠΈΠ· Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° основС Ρ„Π°ΠΉΠ»Π° compile_commands.json (JSON Compilation Database). МногиС систСмы сборки ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² компилятора, ΠΈΠ»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для этого ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ BEAR. Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· Π² этом случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ

pvs-studio-analyzer analyze –f /path/to/compile_commands.json

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ распознаСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ компилятор ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π΅Π³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π°. Если ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ Β«No compilation units foundΒ», ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя вашСго компилятора Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –compiler ΠΈΠ»ΠΈ –c:

pvs-studio-analyzer analyze -c MyCompiler

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ кросс-компиляции ΠΈ использовании компиляторов с нСстандартными ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠšΡ€ΠΎΠΌΠ΅ запусков Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π² Π²Π°ΡˆΡƒ ΡΠ±ΠΎΡ€ΠΎΡ‡Π½ΡƒΡŽ систСму ΠΈΠ»ΠΈ IDE. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΡƒΠΆΠ΅ настроСнной ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π½Π° GitHub Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ PVS_Studio:

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΏΠΎ запуску Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΠ΄ Linux смотритС Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π Π°Π±ΠΎΡ‚Π° с ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ

ПослС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ создаСт Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ², слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ plog-converter, которая устанавливаСтся вмСстС с PVS-Studio.

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹:

  • xml – ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π°Π½Π°Π»ΠΈΠ·Π°, поддСрТиваСтся ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ для SonarQube;
  • csv – тСкстовый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для прСдставлСния Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…;
  • errorfile – Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° gcc ΠΈ clang;
  • tasklist – Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² QtCreator;
  • html – ΠΎΡ‚Ρ‡Π΅Ρ‚ html с ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ описаниСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π°Π½Π°Π»ΠΈΠ·Π°;
  • fullhtml – ΠΎΡ‚Ρ‡Π΅Ρ‚ html с сортировкой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΈ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ исходному ΠΊΠΎΠ΄Ρƒ.

Для просмотра ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ fullhtml, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ позволяСт ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° строку исходного ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° позволяСт ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π² этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

plog-converter -a GA:1,2 -t fullhtml /path/project.log -o /path/report_dir

ПослС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ создан ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /path/report_dir, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡŽΡ‡ -a. Он позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ прСдупрСТдСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ссли Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° создаст ΠΎΡ‚Ρ‡Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ прСдупрСТдСния ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ general analysis ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ достовСрности (High ΠΈ Medium).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°:

Знакомство со статичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ PVS-Studio ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ C++ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² срСдС Linux

По ΠΊΠ»ΠΈΠΊΡƒ Π² ячСйкС Location сообщСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ строкС ΠΊΠΎΠ΄Π°:

Знакомство со статичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ PVS-Studio ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ C++ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² срСдС Linux

Клик ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ диагностики Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ Code ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ с описаниСм этой диагностики.

ПодавлСниС срабатываний Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΊΠΎΠ΄Π° статичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π»ΠΎΠΆΠ½Ρ‹Π΅ срабатывания ΠΈΠ»ΠΈ просто Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ сообщСния (ΡˆΡƒΠΌ). PVS-Studio прСдоставляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ подавлСния Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. Для ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ подавлСния срабатываний, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов, описанных Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ «ΠŸΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ«.

Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ старого ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ массово ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ всС сообщСния. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это Π½ΡƒΠΆΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ добавляСтся Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ suppress ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ pvs-studio-analyzer.

Массово ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ сообщСния Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

pvs-studio-analyzer suppress /path/to/report.log

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… сообщСниях хранится Π² Ρ„Π°ΠΉΠ»Π΅ suppress_base.json, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅ΠΆΠΈΡ‚ рядом с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. Π’Π°ΠΊΠΈΠ΅ сообщСния ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΈΠ· ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ….

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ описан Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ здСсь.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² использованиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° PVS-Studio ΠΏΠΎΠ΄ Linux. НадСюсь, ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΎ Π½Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ вопросы. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ Ρ‚Π΅ΠΌΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ здСсь.

Знакомство со статичСским Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ PVS-Studio ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ C++ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² срСдС Linux

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ с англоязычной Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ, Ρ‚ΠΎ ΠΏΡ€ΠΎΡˆΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ссылку Π½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄: Yuri Minaev. Getting Started with the PVS-Studio Static Analyzer for C++ Development under Linux.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ