Nānā kūʻokoʻa o PVS-Studio (Linux, C++)

Ua ʻike au i kahi paʻi i aʻo ʻia e PVS e kālailai ma lalo o Linux, a ua hoʻoholo wau e hoʻāʻo ma kaʻu mau papahana ponoʻī. A ʻo kēia ka mea i puka mai.


Nā mea

  1. Плюсы
  2. Минусы
  3. Nā hopena
  4. Ma hope o ka'ōlelo

Плюсы

Kākoʻo pane

Ua noi au i kī hoʻokolokolo a hoʻouna mai lākou iaʻu i ka lā hoʻokahi.

Maikaʻi nā palapala

Ua hoʻokō mākou i ka hoʻomaka ʻana i ka analyzer me ka pilikia ʻole. Loaʻa ke kōkua no nā kauoha console (ʻoiai aia kekahi mau hoʻopiʻi ma aneʻi, ʻike i ka ʻāpana Минусы).

Hiki i ka nānā ʻana i nā ʻāpana he nui

He koho "ma'amau" ka mea anaana -j, e ʻae ana e hana like ʻia ka nānā ʻana i nā hana he nui. Mālama kēia i ka manawa nui.

ʻIke maikaʻi

Nui nā ʻano hoʻopuka puka ʻokoʻa, mai ka kikokikona a i kahi puʻupuʻu pūnaewele liʻiliʻi. He maʻalahi, pōkole, me nā hōʻailona e pili ana i nā laina ma ke code a me nā loulou i nā wehewehe diagnostic.

Hoʻohui maʻalahi i ka hui

Aia nā palapala āpau ma kā lākou pūnaewele, hiki iaʻu ke ʻōlelo wale inā kūkulu ʻia kāu papahana me ka hoʻohana ʻana iā CMake, a laila maʻalahi loa nā mea āpau.

ʻO nā wehewehe diagnostic maikaʻi

Inā hoʻopuka ʻoe i ka hopena ma ke ʻano fullhtml, a laila loaʻa i kēlā me kēia memo kahi loulou i kahi wehewehe diagnostic, me nā wehewehe, nā laʻana code a me nā loulou hou.

Минусы

ʻO ka naʻaupō o ka ʻōlelo C++ e ka mea hoʻoponopono

ʻO ka mea pōʻino, hana ʻo PVS i nā hewa syntax i kekahi manawa a hoʻopuka i nā leka maikaʻi hoʻopunipuni ke pololei loa ke code.

Eia kekahi laʻana, aia kahi hana e hoʻi void:

template <typename T>
auto copy (const void * source, void * destination)
    ->
        std::enable_if_t
        <
            std::is_copy_constructible<T>::value
        >
{
    new (destination) T(*static_cast<const T *>(source));
}

ʻAe ka ʻōlelo nui auto Hiki ke manaʻo void, ʻo ia ke kumu ola auto. Akā ua hoʻopuka ʻo PVS i kēia mau memo:

dynamic_tuple_management.hpp:29:1: error: V591 Non-void function should return a value.
dynamic_tuple_management.hpp:29:1: error: V2542 Function with a non-void return type should return a value from all exit paths.

Paena lohi loa

ʻAe, ma ka pūnaewele pūnaewele e pili ana i kēlā me kēia memo he loulou i ka wehewehe diagnostic e pili ana me nā laʻana. Akā ke kaomi ʻoe i kahi loulou, pono ʻoe e kali lōʻihi, a i kekahi manawa e hiki mai ana 504 Gateway Time-out.

'Ōlelo

Aia nā wehewehe a pau ma ka ʻōlelo Lūkini, maikaʻi loa. Akā ʻo nā loulou mai ka hōʻike e alakaʻi mau i ka mana Pelekane. He mea maikaʻi e hiki ke hoʻololi i ka ʻōlelo i hiki iā ʻoe ke ʻike koke i nā diagnostics ma ka Lūkini. ʻAʻole i loaʻa iaʻu kahi koho ma ka interface.

He mea maʻalahi ka hana me nā pae diagnostic ma o ka console

E hoʻomaka me ka ʻoiaʻiʻo i hoʻohana ʻia nā kauoha ʻelua (kēia pvs-studio-analyzer и plog-converter) nā ʻano like ʻole no ka wehewehe ʻana i nā diagnostics.

Kokua no pvs-studio-analyzer heluhelu mai:

-a [MODE], --analysis-mode [MODE]
    MODE defines the type of warnings:
    1 - 64-bit errors;
    2 - reserved;
    4 - General Analysis;
    8 - Micro-optimizations;
    16 - Customers Specific Requests;
    32 - MISRA.
    Modes can be combined by adding the values
    Default: 4

Ua lōʻihi koʻu manawa e ʻimi nei i kahi e hele ai hoʻohui ("hoʻohui i nā waiwai") kī. Ua hoʻāʻo wau e papa inoa iā lākou i hoʻokaʻawale ʻia e nā koma:

pvs-studio-analyzer analyze ... -a 1,4,16

Ua ho'āʻo wau e hoʻopaʻa inoa i ke kī i nā manawa he nui:

pvs-studio-analyzer analyze ... -a 1 -a 4 -a 16

A laila wale nō wau i ʻike ai he mau makamaka ʻuʻuku kēia! A pono ʻoe hōʻuluʻulu,ʻaʻole hoʻohui nā manaʻo. No ka laʻana, e kiʻi i nā diagnostics maʻamau, diagnostics for micro-optimizations a me MISRA, pono ʻoe e hōʻuluʻulu iā lākou (4 + 8 + 32 = 44):

pvs-studio-analyzer analyze ... -a 44

ʻO ka hoʻohana ʻana i nā bitmasks i nā pilina mea hoʻohana he ʻano maikaʻi ʻole. Hiki ke hōʻuluʻulu ʻia kēia mau mea a pau i loko, a hiki ke hoʻonohonoho ʻia nā hae no ka mea hoʻohana.

Eia kekahi, aia kekahi mea pono plog-converter, ka mea e hoʻopuka ana i ka ʻike loiloi static hiki ke heluhelu ʻia e ke kanaka. Loaʻa iā ia nā pilikia ʻē aʻe.

Kōkua no ka papahana plog-converter nā hōʻike:

-a, --analyzer            Specifies analyzer(s) and level(s) to be
                          used for filtering, i.e.
                          'GA:1,2;64:1;OP:1,2,3;CS:1;MISRA:1,2'
                          Default: GA:1,2

Ua ʻike ʻia kekahi mau "pae" ma ʻaneʻi ʻaʻole ma laila ma mua, ʻaʻole wau i ʻike i kekahi mea e pili ana iā lākou ma ka palapala.

Ma ka laulā, ʻaʻole maopopo. ʻO ia ke kumu aʻu i hoʻonoho ai i nā mea a pau i ka palena kiʻekiʻe.

He pūʻulu hoʻohiki lapuwale ma Catch

ʻElua o nā papahana ʻekolu aʻu i kālailai ai e hoʻohana i kahi waihona hoʻāʻo ʻāpana ʻO Catch2. A ʻo ka hapa liona o nā memo (!!! 90 mai 138 i hoʻokahi a me 297 mai 344 i kekahi!!!) penei:

Nānā kūʻokoʻa o PVS-Studio (Linux, C++)

ʻAʻole noʻonoʻo i ka multithreading

Nui nā manaʻo maikaʻi ʻole e pili ana i nā ʻano loli ʻole a i ʻole nā ​​​​loulou pau ʻole, ʻoiai ke hana nei me kēia mau ʻokoʻa mai nā loina like ʻole, a inā ʻaʻole pēlā, ʻaʻole e holo nā hoʻokolohua ʻāpana.

Nānā kūʻokoʻa o PVS-Studio (Linux, C++)

Eia nō naʻe, hiki i kahi mea loiloi static ke noʻonoʻo i kēia? ʻaʻole maopopo.

Nā hopena

ʻAʻole i loaʻa i ka PVS kekahi mau pōʻino maoli i kaʻu mau papahana open source moku и Aʻe aʻe, a me kahi kikoʻī hana, no nā kumu maopopo, ʻaʻole hiki iaʻu ke hōʻike. ʻOiaʻiʻo, pono e hoʻomanaʻo i kekahi mau hemahema i hopu ʻia a hoʻoponopono ʻia ma mua o ka hoʻohana ʻana Cppcheck и scan-build.

Ma keʻano laulā, ʻano like ka manaʻo o kēia mau mea loiloi: ʻae, hopu lākou i kekahi mea, i kekahi manawa he mea koʻikoʻi, akā ʻo ka mea holoʻokoʻa ua lawa.

Hiki paha (a makemake wau e noʻonoʻo pēlā) ke hoʻohana nei kā mākou hui i nā hana hoʻomohala polokalamu e hiki ai iā mākou ke hana i ka liʻiliʻi o nā code shitty. ʻOi aku ka maikaʻi ʻaʻole e hana i nā pilikia ma mua o ka lanakila ʻana me ka heroically.

No laila, lawe wau i ka hāʻawi ʻana i kekahi mau ʻōlelo aʻo e pili ana i ke kākau ʻana i ka C ++ i ʻole e pana i nā wāwae o kekahi a i ʻole e paʻi i kekahi ma ka lae me ka rake.

E hoʻohana i nā diagnostics compiler

Ke hoʻohana nei kā mākou hui (a aʻo iā ʻoe) i kēia mau koho hoʻohui:

-Werror

-Wall
-Wextra
-Wpedantic

-Wcast-align
-Wcast-qual
-Wconversion
-Wctor-dtor-privacy
-Wenum-compare
-Wfloat-equal
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wredundant-decls
-Wsign-conversion
-Wsign-promo

E ho'ā iā lākou i kāu papahana a aʻo nui e pili ana i kāu code.

Pili i ka maʻamau

E ho'āʻo e hoʻohana i nā mea e hilinaʻi ana i ka platform inā loaʻa nā analogues maʻamau, a inā ʻaʻole hiki iā ʻoe ke hana me ka ʻole o lākou, e hoʻopili iā lākou i nā poloka kūikawā no nā macros (a i ʻole kekahi mea ʻē aʻe) a mai ʻae wale i kāu code e hōʻuluʻulu ʻia ma lalo o nā kūlana i kākoʻo ʻole ʻia.

Hoʻopili i nā semantics hana maʻamau

Pono e hoʻohui, pono e hoʻonui i ka hoʻonui, pono e hoʻonui i ka hana, pono ke kāhea hana, pono ke kope kope, pono e halihali, pono ka ipu iterable, pono ke hoʻonui i ka iterator. ++ a me ka dereferencing *. A pela aku a pela aku.

Manaʻo wau ua maopopo ka manaʻo. Aia nā ʻaha kūkā i paʻa ʻole, akā e manaʻo nā mea hoʻohana a me nā mea heluhelu o kāu code e ʻike. Mai ho'āʻo e hoʻomāʻewaʻewa iā ʻoe iho.

Kākau i ke code kūpono

ʻO ka mea mua, ke ʻōlelo nei au i ka waihona maʻamau. He mea makemake nui ia e hoʻohana ʻia nā loulou o kāu mau papa a me nā hana me nā hale waihona puke maʻamau a me nā hale waihona puke ʻē aʻe (e laʻa, Boost).

E ʻoluʻolu e nānā i ka STL a me Boost interface. Me nā ʻokoʻa ʻokoʻa, e ʻike ʻoe i kahi kumu hoʻohālike kūpono ma laila.

E hoʻohana i nā mea hana open source

No ka hoʻohālikelike like ʻana, aia ma kahi o ʻelua mau mea hana manuahi hiki ke hoʻopili ʻia i hoʻokahi wale nō papahana me ka ʻōnaehana kūkulu CMake.

Hiki iā ʻoe ke heluhelu hou aʻe e pili ana i kēia ma kaʻu puke hou.

Ma hope o ka'ōlelo

ʻO ka mea hope loa, makemake wau e hoʻoikaika ʻaʻole wau e aʻo e hoʻohana i ka PVS a i ʻole nā ​​​​mea hoʻoponopono static ʻē aʻe. Akā ke paipai nei au iā ʻoe e noʻonoʻo e pili ana i ke ʻano o ka loaʻa ʻana o ka static analyzer i nā hewa nui i kāu code.

He hopena wale nō kēia. Pono mākou e ʻimi a hoʻopau i ke kumu.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka