ááá፠á ááá á¨áŽáľ áááá ááá áá¨á á°áá˝áśááᣠá ááłááľ áá á áááľá á áĽáá´áľ áááá áĽáá°ááľá˝á áłáľáŁáá ᢠáĽá áľáá˝ ááá áŤá°á¨á á áá, ááá á áľáááľ á áĽáą áá á áá°ááá, "áľáłá˛á áľááłá" á¨áááá á áľááłá áá¨á áá¨áľ áá˝áá. áá áĽáá°áá áĽá á¨ááŽáááľá áá áĽáá´áľ áĽáá°áááá áĽááá˘
áĽáá°áá á ááááá áááá ááá á¨áťááᣠáłáłáááᣠá áľáłá˛á analyzer ááľáĽ áŽáĽá¨áᢠáĽáááłá áá ááááá áááá áááá áŞáŤ á áŽáą ááľáĽ ááአáľááá˝á á˝ááŽá˝ áľáá˝ á˘ááá á¨ááľá ááá፠áľáĽáľáŚá˝á áŤáááŁáᢠáááłáᣠá áŞáĽáá áľáąá˛áŽ ááľáĽ á¨C++ áŽáľ á˛á°á áľáĄ á¨áá¨á°ááľá ááŤáŠ áá˝ááá˘
á áá
áá
ááľ ááľáĽ á°áááá áááá áĽááŤáá var á á°ááŁáŠ ááľáĽ á¨áľááá áŚáł áĽá
á áá á áááá. áľááá
á áĽáááąáŁ áááá áááľ ááťáá ááá á¨áááááłááľ áŽáľ á°ááłá áá áá áá áᢠááá ááᣠáĽáá° á˝ááᣠáááááá ááá ááŞá¤áľ-áľáąá˛áŽ áŤá ááŤá á°ááłáá˝ á á°áá¨áŁ á á áááŁáŞá á¨áá°áĄáľ ááľá ááááŤáá˝ áľáá˝ á¨á˝ááŽá˝á ááá áĽáť ááŤááááą áá˝ááá˘
á¨áááááłááľ áľááłá áá áĽáá°áá áĽá áĽáá´áľ áĽáá°áá°ááĽáŠáľ á áĽááá áááľ áŤááááŁ
á¨áááááἠáľáá°á ááá áŤáľáááááłá?
á á ááŠ: ááá á áĽá áá áá.
á¨áááááἠáľáá°á á áŽáą ááľáĽ áĽá á¨á°ááŤáŠ á˝ááŽá˝á áĽááľáłáá ááá áľáááᥠá¨ááá áááŁáłáá˝ á¨á°áłáłá° á á ááá áĽáľá¨ áľá¨áŁá˘ áááłá, á ááľáŠ
auto x = obj.x;
auto y = obj.y;
auto z = obj.z;
á¨áá¨á°ááá áŽáľ á˝ááááĄ-
auto x = obj.x;
auto y = obj.y;
auto z = obj.x;
áĽáá°ááłá¨á á áá¨á¨áťá ááľáá áá á¨áľá¨áŁ á áᢠáááłáᣠPVS-Studio á¨áá¨á°ááá ááľá ááá፠áá°áŁááĄ-
áĽáá˝áá áá°áá
áľá
á°áľ áááľááŁáľ á¨ááá á Compiler Explorer ááľáĽ ááá á¨áá ááłá ááááŠáĄ *
áĽá áĽááľá áĽáá°á°á¨áąáľ, ááĽáá°áá á áááľ á¨áŽáľ áááá˝ áá˛áŤáá áľáŠá¨áľ ááľá áľ áááá á ááťáá, áĽá á áá ááááŤáľ, ááá ááá ááá áĽáááł á áá ááአáĽáá°áá°áŤ á áá°áĽ áĽáŠ á°ááľ á áá¨á áááἠáá˝áá.
ááá, áá
á ááá˝ áľá
á°áľ áá. ááá˘á á¨ááááá á¨áá
áľáá¨áłá áááľ ááἠáŽáľ á˘á˝ááľ? ááá á°áá á áŽáą ááľáĽ á°áá
áśááłá
á¨áááááἠáľáá°á á¨áłá¨áŁá¸á ááĽááá
áááłáá˝ ááᢠáá
á áŽáą ááľáĽ á¨á°ááŤáŠ á˝ááŽá˝á á¨áá áá áĽá ááá á áá
ááááľ ááá á áľááá áĽááłááá á á°ááą ááľáĽ á¨ááŤáĽáŤáŤ ááᢠáááá˘á á¨áłáľ áá, áá ááŤáľá¨áľá áĽáá°áá˝á áĽá áĽáá´áľ ááľá°áŤá¨á áĽáá°ááťá. áá áááľá áĽáá°áá˝á á¨ááŤáłá ááłá áá¸ááᥠ*
á°ááłá á á ááážáš ááľáĽ á¨ááŤááá¸áá á¨á áá á áľá°áłá˝ áľá á°áśá˝á ááááľ áá˝áá-
á10 á C++ ááŽáááśá˝ ááľáĽ 2019 áá áá áľá á°áśá˝ á10 á C# ááŽáááśá˝ ááľáĽ 2019 áá áá áľá á°áśá˝ á 10 á á፠ááŽáááśá˝ ááľáĽ 2019 ááἠáłááŤáá˝
á áá áá á á˝áá á ááĽá á áĽá á¨áááááłááľ áľááłá áľááá áĽá á áĽááá á áľáááá áĽáąá ááá¨á áľááá ááááᢠáá á¨áľ áááá? á áá áŁáá ááŽáááľá ááľáĽ á á˛áľ ááłáŞáŤ áĽáá´áľ áĽáá°ááááľ? áĽá áĄáľáá á¨áĽáą áá áĽáá´áľ ááľá°ááá ááťáá? ááĽááá áĽáŤááá˝ áááľ á¨áá á áłá˝ áŤááá.
ááłá°á˘áŤ: á¨áááááἠáľáá°á áĽáá° áŽáľ áááááá˝ áŤá á áá áááŽá˝á á áá°áŤá ááá á áá°áááᢠáá
áá áá°áľ áŤááá, á¨áľá¨áŁ, á¨á°áłáłáą áĽá á á°áá ááľáá˝á á áľááľá áááľá°áá áĽá áááľá°áŤá¨á áá¨áłá. á¨á°áłáłá° á
áá ááá á
áá á¨áááá ááá
á á áááŞáá áĽá á áŽáľ ááá˝ááľ áá á áŽáľ áááááá˝ áá áá°áŽá á¨á áá áá¤áłá ááá˘
0. ááŁáŞáŤáá ááá
ááá á¨áááá¨á á áá¨áŤ áľáŞáľ ááᢠá áĽááἠááŁáŞáŤáá á¨áá
á ááľ á ááĽáł á áá°ááľ á¨ááŤáá á¨áá á áááľ áá°áľ ááľáĽ á ááľ ááá áááľá°ááá
ááá°á á¨áŁáľ ááᢠáľááá
, ááááŞáŤ ááľá¨á áŤááĽááľ ááá ááá¨áľ áá
á áá á°á¨á áá áááŤá-
- á¨á°ááłá áá á¨áááááľ ááááśá˝ áááľ áá¸á;
- á°ááłá á¨áĽáľááľ á áŤáŁá˘á áá á°áłáá áá?
- á á áá áá á ááŽáááśá˝á ááľáĽ áá á˝ááŽá˝ á á?
á¨áááááľá áá á¨áŤá á áá ááááŞáŤ ááľá¨á áŤááĽááľ á¨á á
áááá ááŽáááľ áľáá°á ááŤááľ áá (
áĽáááłá áá á¨áááááłááą á°ááłáá˝ áľáá
á¨áŽáľ áá°á¨áľ ááá¸á ááŽáááśá˝ áĽá ááĽá áŤáá¸áá ááľá ááááŤáá˝ áá°áŁáᢠááŽáááľá ááľááá áĽá¨á°áŤ áľááá áááá ááľá°áŤá¨á á áŤáľáááá, áá
áááľ áĽááá
á˝ááŽá˝ ááłá á áá°áá. á˘áááᣠá áá°
á áĽááἠ178 ááľá ááááŤáá˝ á¨áĽá áşáá˝ ááá¨áľ á áŁá ááá áá¸á...
á áľáŽá˝ ááľáĽ ááŤá¨áá и áá
áŤá áĽááá áá áĽáŠ ááľá ááááŤáá˝ á á, ááá áá áĽááá
ááľáŚá˝ á ááľá°á áľááááááľ (á áľá°áááááľ) áŤáá¸áá ááááŤáá˝ áŤáŤáľáłá. áľá ááľá ááá፠á°á¨ááá˝ áĽá á áááśááľ áľá áááľáŤáľ á ááŤáŽá˝ á°á¨á᪠áá¨á áĽáá
ááááľ ááťááᥠ*
á áŁá á áľá°áłá˝ á¨áááľá áľá
á°áśá˝ á á°áłáŤ áááł ááááá (áĽá á á°áłáŤ áááł áá¨á) áá á áá
1. á ááśáá˛á
á¨á°á°ááá á á áá á°á°áŞáá˝á ááááá áĽá áá° CI áááááľ ááá á áá ááᢠááŽááŤááŽá˝ á¨áááááłááľ á°ááłá áá áá á¨ááááŤá¸á á ááľ áá áá°á¨á á áá áľá˘ áĽáááłá áá á¨ááŽááŤá á áľáŤáá áľááłá ááááľá áá¨áłá áá˝áá ááá ááá ááľá¨á á ááááá. áá áá áááľá¨á, áŤáá°áá°á áŽáľ áá° á á ááá á¨áĽáľááľ á áááŤá ááľáĽ áĽááłááᣠáááá ááá á¨áá¨á¨áť áá°áť ááľá¨á áŤáľáááááłá.
á áá á°á¨á áá áááŤá-
- ááŁáŞáŤá áá ááááľ á ááśáá˛á á ááŤáŽá˝ áá°áŁá;
- á°ááłá á¨áĽááľá á¨áá°áĽá°á˘áŤ áľáááľ áá á°áłáá áá?
áášá á°ááľ áľááá á ááłááľ áá ááá á ááŚáľ
á áá áá° ááŁáááľ áŤáá áá á°áľ (CI) á áááááśá˝ áĽáááľá˘ ááááá á°ááłá áŤá ááá á¨áŁáľ á˝áá á ááľáŁá¸á áá°áá á áá˝áá. áá áá áááľá¨á á á§áá§á ááľáĽ á¨á°áᨠá°á¨á ááá á áŤáľáááááłá, áá á áĽááá áá á¨áááŁáł áĽá á¨ááĽá áá¨áŤáá˝ á áá áá. áá á¨áá¨áááá á¨á°ááŤáŠ á¨áŽááśá áááááŤáá˝á á áá áá ááᢠáááłáᣠPVS-Studio á¨áá¨á°ááľá áááááŤáá˝ áŤáááŁááĄ-
PVS-áľáąá˛áŽ_CMd.exe (á¨áááľááá˝ áľáá°áᣠC#ᣠC++ ááŽáááśá˝ á áááśá áá)CLMonitor.exe (á¨áá ááá ááľáľá)pvs-áľáąá˛áŽ-á°ááłá (á ááááľ/áááŚá¤áľ áá á¨C++ ááŽáááśá˝ áľáá°á)pvs-áľáąá˛áŽ-áśáľááľ (á¨áááľá áľáá°áᣠC # ááŽáááśá˝ á ááááľ/áááŚá¤áľ)pvs-áľáąá˛áŽ.jar (á¨á፠ááŽáááśá˝ áľáá°á)PlogConverter (ááá ááá¨áŞáŤá áŞáááľ á áľáá)
áľááłáá áá° CI áááááľ áśáľáľ áááŽá˝á ááľá¨á áŤáľáááááłáá˘
- á°ááłáá ááŤá;
- áľáá°á á ááľ;
- áá¤áśá˝á á á ááĄá˘
áááłáᣠPVS-Studioá á ááááľ (Debian-base) áá áááŤá á¨áá¨á°ááľá áľáááá˝á ááľáŹáľ áŤáľáááááłáá˘
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-get update -qq
sudo apt-get install -qq pvs-studio
áááśááľ á ááŤááą áľáááśá˝ áá á°ááłáá á¨áĽá á á áááŁáŞá áááŤá ááá ááááľ á¨áá ᣠáá á°ááłáá á¨áľáĽáá ááľáአáá°ááŤáľ ááťáá-
PVS-Studio_setup.exe /verysilent /suppressmsgboxes
/norestart /nocloseapplications
á áááśááľ * áá PVS-áľáąá˛áŽá áľááá°ááŤáľ á¨á áá ááá ἠáľá˝ááá
á¨á°áŤá á áá áľááłááá á ááĽáł ááŤááľ áŤáľáááááłá. ááá áá, áá á áááľá¨á á¨ááá¨á á¨á°ááá áĽá áá°ááá˝ áŤáá á áá áĽáť áá. áá á¨ááá áľ ááááŤáľ á¨áááááἠáľáá°á á á°áááś á¨á°á ááᨠáááľ áĽáĽá áľááááľáľ ááá˘
á¨ááľáááŞáŤ áá´á á ááľá¨á áĽá á ááŽáááľ áŁá áŞáŤáľ áá á¨ááá¨áŽá áľááá á C++ (ááááľ) á ááŤáá áĽáá° ááłá á áłáŤáááĄ-
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w
á¨ááááŞáŤá áľááá áľááłááá áŤáŤááłá, áĽá ááá°áá
ááłá°á˘áŤ: á¨á˝áá á áá¸áą á¨áááá˝ ááᢠá ááá áĽáá° ááłá ááá§áᢠáá áἠá áľá°áłá˝ ááá á¨áŞáááľ á áá¸áľ áľáŠá¨áľ ááľáĄ - FullHtml. á áŽáą ááľáĽ áĽáá˛ááą ááá áľáááłá.
á á áááš ááľáĽ á CI áá áľááłá áľááááááľ á¨á áá ááá ἠáá˝áá á˘
áĽáşáŁ á°ááłáá á áááŁáł á áááá áá á áá á¨ááłáᢠá áá, á ááľ á°á áŤáá°áá°á áŽáľ á¨á°áá, á¨áá¨áááŤá á°á¨á á ááłáŤá, áĽá á˝ááŠá ááá°á ááá áá˝áá, ááá áá, áá áá á áá ááš á áá°áá, ááááŤáąá á áááŤáášá á¨á°áááą á áá áłááá ááŽáááąá ááá°á˝ á¨á áá áá¤áłá áá, ááá áá áá áá á áá ááš á áá°áá. á¨áĽáą á ááľáŁ á ááá°áľ áĽáŤá á°á¨á á.
á á á áááᣠá¨ááľáł áĽáŤá áľáá°áá áááá á á CI áá á¨á°ááá°á á¨áľááłá áááá áĽáá á¨á°áᨠá áá°ááᢠá¨á°áá¨áŠ áááá˝á áááá ááááľ á áľááá áŤááá á áľá°ááᢠáĽááá áĽááá áá git á á áá áá á á áááŤáá˝ ááŤá¨á áŤááá ááŠááľ á áá á¨á ááááľ áá˝áá-
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
á áá áá áá á¨áááá˝ áááá áĽáá° áá¤áľ áá° á°ááłá ááľá°ááá áŤáľáááááłáᢠáááłáᣠá PVS-Studio áá áŁáá˛áŤáá á áá áá áá°áá áŤáᢠ-S:
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
á¨ááłáĽ áĽáŤááá˝á áľááá°áá°á á¨á áá ááá
áľá˝ááá
*
á¨ááłáĽ áĽáŤááá˝á áľáá°á á áááááľ ááľá ááááŤáá˝á á¨áŤá áľáááśá˝á áááľ áá˝ááᣠá áá á áŤáá°áá°á áŽáľ á¨áááťááá áľá áľáá á ááá á áá˝ááá˘
áá
áá á áĽááἠáĽáŠ ááᣠáá áááá ááľá ááááŤáá˝ á á ááľ áŚáł áá¨áľ ááťá áĽáááááᢠá¨áľáłá˛á analyzer áĽáť áłááá á¨á ááľ áá¨áŤáá˝ ááá á¨á°áááá á°ááłá. ááá
á¨á°ááŤáŠ á áááááśá˝ áĽá á°á°áŞáá˝ á áᢠPVS-áľáąá˛áŽ, áááłá, á áá
2. á ááᢠáá˝áá˝ áá áá á°áľ
ááááłá áááľ á á ááá á°ááłáá ááŤá áĽá áááá ááá á áá ááᢠá áá áá á áĽáááášá á¨áľáŤ ááááśá˝ á áľááľáá áŤáááłáᣠáľááá áá á áŁá ááá ááá á°áĽá áá ፠áá˝ááá˘
áĽáá° ááá á ááŤá, ááá˘áá˝ á áľááááá á°ááłá áĽáŤáłá¸á ááŤá áá˝áá. ááá áá
áĽá áá á¨áááľáľ áĽá á¨ááľááľ áľáŠá¨áłá¸á á¨áá¨ááá á ááá áŤááá áĽá á áľááááášá áŁáá˛áŤáá˝ á áá áá áá°áąá á áŤáľ-á°á ááľá¨á áá˝ááᢠá PVS-áľáąá˛áŽ á¨á°ááŤáŠ áá¸áá˘
á¨á፠á áľááááášá ááááá˝ ááŤá áŤáľáááááłá, áááłá á
3. áááłá á á ááá
á áá
á°á¨á, á á¨áá áĽá
á áá á áááá áľ áá á°ááłáá áááá á ááááśá˝ áĽááľ áááľá ááááá ááá áá. áľá á á ááá ááŽáááą á¨á°áá áľááłá áĽá áá áááľáłá ᣠáá á á á
ááá ááŽáááľ ááľáĽ áŽáľá áá áŤá
á áá áĽááááŁáá? á áŁá áľáá
á¨áá ááá á áááľ ááťáťáŤ á¨áá, áá˛áŤáá áááá á¨áŽáľ áá°á¨áľ áááŤáᢠá á ááľ áá á¨ááá¨áŠáľ á¨áááá˝ áĽááľ á¨á°ááá á áá áĽááĽáá á áá ááĽáᣠáľááá
áĽááąá áá°áá°á á°áᢠááᢠáĽáá˛á
ááá áááł á á
á°ááłá á á áἠáá á á°ááá á áŽáľ ááľáĽ á˝ááŽá˝á áŤááᣠáá áá á áŤáą áŞáááľ áŤá°áááᢠáááłáᣠPVS-Studio ááá፠á áá áá áľááá ááłá ááááááłááĄ-
á áĽááἠááá˘áá˝ ááłáŞáŤáá áĽáá˛á áá áááá á á á áá°áá. áá áĽáá°áá áĽá áĽáá´áľ áĽáá°áá áĽáá°ááá áááááŤá¸á áŤáľáááááᢠáĽáá
ᣠáááłáᣠá PVS-Studio ááŁá á
áá á˝ááá˝ á áᣠááá áá áááááĄáľ ááááá ááłáŞáŤ á°ááłáłá á áἠáľáá ááá˝á ááááľ áá˝ááá˘
á áááśááľ (ᲠᣠᲠ++ ᣠᲠ#) áá PVS-Studioá áĽáá´áľ áááľ áĽáá°ááťá PVS-Studioá á ááááľ áĽá áááŽáľ (á˛áŁ Რ++) áá áĽáá´áľ áááľ áĽáá°ááťá PVS-Studio Java áĽáá´áľ áĽáá°áááá
áĽáá°ááá áŤá á˝ááá˝ ááááłá á á ááá á áľááá á¨áááľá áááá áá¨ááá˝ áá°áŁá áĽá áĽá áá á áááľáąá. đ
ááŁáŞáŤáá á ááá á°á¨á ááá á˘ááᣠá¨ááááŞáŤááš á áááá˝ á á ááą áá áľ áĽá ááľá ááááŤáá˝á á ááááᢠáĽáá° á áááłá°á áá, á¨áááááἠá°ááłáá˝ áášá á áá°áá, áľááá á¨áá áá° áá á¨áá¸áľ á áááłá áá¤áśá˝á áá°áŁá. áĽááąá áááá áĽá áá ááá ááᥠáááłáᥠá PVS-Studio plugin for Visual Studio ááľáĽ á ááľ ááá áĽáť á á ááľá¨á áŤáľáááááłááĄ-
ááá áĽáá áĽááąá á¨áá¨ááá
á¨á áá ááá ááľá¨á áá˝áá. áááłáᣠá˝ááá ááá°áá áŞáááľ ááľá¨á áá˝ááᢠá¨áá¸áľ á áááłáá ááľá°áŤá¨á á¨áá˝á á¨áááŁá áá°ááľ ááťáťáŤáá˝ áá á áĽáŤááłááą áá ááŽáľ á¤áá á¨á°áአá¨áá¸áľ á áááłá áá¨ááá˝ áĽáŤááą áĽá áĽáŤááą áĽááłá ááľá°áá áá˝ááá˘
á¨á°ááá° á áá
áľááá á áááľ áá°áľ ááľáĽ á¨áááááἠáľááłááá˝á á ááááľ áááá á°á¨ááá˝ á áááá. áĽáá°ááá áŤá ááłáŞáŤáá˝á á CI áá áááá á áľááá á˘ááá, áĽááąá áááľáŹáľ á áŁá á áľáááá áŚáł á¨ááá˘á áŽááá°á áá. á°ááá á¨áľáłá˛á á°ááłá (Static analyzer) á¨áĽááľá áá á ááá áŚáł áá áŽáą ááá áĽáŠ áĽááłááá á¨áááá áłá á áá°áá. á á°ááŤáá á°ááá áĽáá°áá á¨ááááá áĽá á¨áá ááá áĽáá°á¨áłá á¨ááŤáľáłááľ á¨áłáľ ááá˘
áĽáááľ áá ᣠáŤá áá°á á á á ááá ᣠá¨áááááłááľ áľááłá áááľá á á¨áá°á áááł ááááá á¨áááťá ááᢠááááŠáŁ áááᢠáŤáá ááá áĽá á ááľáĽáľáĽ áĽá á áááᢠá¨áá á¨áŽáľ áááá˝á á áááá áá áĽáť áłááá á á áľá ááááŤá¸á áá ááᢠá ááľááśáš ááá¨áŤ á¨á°áአá áá á˝ááá ááááľ á°áľ á¨ááá áĽáť áłááá áá á¨áááľáľá áááá ááľááᢠá¨áááááłááľ áľááłá á áá°á áááľ áĽá á áá á˛áá á áŽááá°áá áá áŤááá áĽáŤááłááąá ááἠá ááĽáł áááá¨áłá áĽá á áŽáą áá á áá°áŠá áľ áá á á áŤáŁáŞ áŚáłáá˝á áŞáááľ áŤá°áááá˘
áĽá áĽááľá ááá á¨áľáŤ áŁáá°á¨áŚá˝á á°ááłáá áá°áá አá áá áľáááá áĽááá á áŤááá á áá á˝ááá áĽáá˛áŤáᥠáĽáááááłáá "
áá
á á˝áá ááĽááááá á°áá᪠áłáłááá˝ áááŤáľ á¨ááá áĽáŁááá á¨áľááá ááááá áá ááᥠMaxim Zvyagintsevá˘
ááá: hab.com