Nyochaa onwe ya nke PVS-Studio (Linux, C++)

Ahụrụ m akwụkwọ PVS mụtara nyocha n'okpuru Linux, wee kpebie ịnwale ya na ọrụ nke m. Nke a bụkwa ihe si na ya pụta.


Ihe

  1. Плюсы
  2. Минусы
  3. Nsonaazụ
  4. Afterword

Плюсы

Nkwado na-anabata

Arịọrọ m igodo nnwale ma ha zigara m ya otu ụbọchị ahụ.

Akwụkwọ doro anya nke ọma

Anyị jisiri ike malite nyocha ahụ n'enweghị nsogbu ọ bụla. Enyemaka maka iwu njikwa dịkwa (n'agbanyeghị na enwere mkpesa ebe a, lee ngalaba Минусы).

Enwere ike ịme nyocha multi-threaded

Onye nyocha nwere nhọrọ "ọkọlọtọ". -j, na-enye ohere ka a rụọ nyocha n'otu n'otu n'ọtụtụ ọrụ. Nke a na-azọpụta ọtụtụ oge.

Ọhụụ dị mma

Ọtụtụ ụdị mmepụta dị iche iche, site na ederede gaa na obere muzzle webụ. Ihe ntanetị weebụ dị mma, nkenke, yana ntunye n'akụkụ ahịrị dị na koodu yana njikọ na nkọwa nyocha..

Mfe ntinye n'ime mgbakọ ahụ

Akwụkwọ niile dị na weebụsaịtị ha, enwere m ike ịsị na ọ bụrụ na ejiri CMake rụọ ọrụ gị, mgbe ahụ ihe niile dị mfe.

Nkọwa nyocha dị mma

Ọ bụrụ na ị na-emepụta mmepụta na ọnọdụ fullhtml, mgbe ahụ ozi ọ bụla nwere njikọ na nkọwa nyocha, yana nkọwa, ihe atụ koodu na njikọ ndị ọzọ.

Минусы

Amaghị asụsụ C++ site n'aka onye nyocha

N'ụzọ dị mwute, PVS mgbe ụfọdụ na-eme njehie syntax ma na-ewepụta ozi dị mma mgbe koodu ahụ ziri ezi.

Dịka ọmụmaatụ, enwere ọrụ na-alọghachi 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));
}

Ee bụ isi okwu auto Nwere ike ịpụta void, nke ahụ bụ ihe ọ bụ ụgbọ ala. Mana PVS wepụtara ozi ndị a:

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.

Saịtị dị nwayọ

Ee, na webụsaịtị dị n'akụkụ ozi ọ bụla enwere njikọ na nkọwa nchoputa kwekọrọ na ihe atụ. Ma mgbe ịpịrị njikọ, ị ga-echere ogologo oge, ma mgbe ụfọdụ ọ na-eme Oge ngwụcha nke ọnụ ụzọ ámá 504.

Asụsụ

Nkọwa niile dị na Russian, nke dị mma. Mana njikọ sitere na akụkọ ahụ na-eduga mgbe niile na ụdị Bekee. Ọ ga-adị mma ka ị nwee ike ịgbanwe asụsụ ka ị nwee ike ịlele nyocha ozugbo na Russian. Ahụghị m nhọrọ dị otú ahụ na interface.

Ọ dịghị mfe ịrụ ọrụ na ọkwa nyocha site na njikwa

Ka anyị bido n’eziokwu na ejiri iwu abụọ a (nke a pvs-studio-analyzer и plog-converter) usoro dị iche iche maka ịkọwapụta nyocha.

Enyemaka maka pvs-studio-analyzer na-agụ:

-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

Eji m ogologo oge na-agbalị ịchọta ebe m ga-aga gbakwunye ("na-agbakwụnye ụkpụrụ") igodo. Agbalịrị m idepụta ha site na akara rịkọm:

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

Agbalịrị m ịdebanye aha igodo ọtụtụ oge:

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

Naanị mgbe ahụ ka m ghọtara na ihe ndị a bụ ihe mkpuchi! Na ị chọrọ nchikotama ọ bụghị gbakwunye pụtara. Dịka ọmụmaatụ, iji nweta nyocha n'ozuzu, nchọpụta maka micro-optimizations na MISRA, ị ga-achịkọta ha (4 + 8 + 32 = 44):

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

Iji bitmask na oghere ndị ọrụ na-abụkarị ụdị ọjọọ. Enwere ike ịchịkọta ihe ndị a niile n'ime, yana enwere ike ịtọ ntọala ọkọlọtọ maka onye ọrụ.

Na mgbakwunye, enwerekwa ngwa ọrụ plog-converter, nke na-ewepụta ozi nyocha static nke mmadụ nwere ike ịgụ. O nwere nsogbu ndị ọzọ.

Enyemaka maka mmemme plog-converter na-akọ:

-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

Ụfọdụ "ọkwa" pụtara ebe a na-anọghị na mbụ, ma ahụghị m ihe ọ bụla gbasara ha na akwụkwọ ahụ.

N'ozuzu, o doro anya. Ọ bụ ya mere m ji edobe ihe niile na oke.

Otu ụyọkọ iyi nzuzu na Catch

Abụọ n'ime ọrụ atọ m nyochara na-eji ọbá akwụkwọ nnwale otu Catch2. Na akụkụ ọdụm nke ozi (!!! 90 n'ime 138 na otu na 297 n'ime 344 na nke ọzọ !!!) nwere ụdị a:

Nyochaa onwe ya nke PVS-Studio (Linux, C++)

Adịghị n'ime akaụntụ multithreading

Enwere ọtụtụ echiche ụgha banyere mgbanwe ndị a na-eche na ha na-agbanwe agbanwe ma ọ bụ loops na-adịghị agwụ agwụ, ebe ọrụ na mgbanwe ndị a na-esi na eriri dị iche iche pụta, ma ọ bụrụ na nke a abụghị otú ahụ, mgbe ahụ ule otu agaghị arụ ọrụ.

Nyochaa onwe ya nke PVS-Studio (Linux, C++)

Agbanyeghị, onye nyocha static nwere ike iburu nke a n'uche? Amaghị.

Nsonaazụ

PVS ahụghị ezigbo ahụhụ n'ọrụ m mepere emepe wupu и Osote, yana na akwụkwọ na-arụ ọrụ, nke, n'ihi ihe doro anya, enweghị m ike ịnye. N'ezie, ọ bara uru iburu n'uche na ejideworị emezighị emezi ma mezie na mbụ Cppcheck и scan-build.

N'ozuzu, echiche sitere na ndị nyocha ndị a niile bụ otu ihe ahụ: ee, ha na-ejide ihe, mgbe ụfọdụ ọbụna ihe dị mkpa, ma n'ozuzu onye nchịkọta zuru ezu.

Ọ ga-ekwe omume (na m onwe m na-enwe mmasị iche ya) na ndị otu anyị na-eji omume mmepe ngwanrọ na-enye anyị ohere ịmepụta koodu shitty kacha nta. Ọ ka mma ịghara ịmepụta nsogbu karịa iji dike merie ha.

Ya mere, m na-enwere onwe m inye ndụmọdụ banyere otu esi ede na C++ n'ụzọ dị ka ịghara ịgbapụ ụkwụ onye ọ bụla ma ọ bụ jiri rake tie onye ọ bụla n'egedege ihu.

Jiri nyocha nyocha nke mkpokọta

Ndị otu anyị na-eji (ma na-adụ gị ọdụ ka) nhọrọ nchịkọta ndị a:

-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

Kwado ha na ọrụ gị wee mụta ọtụtụ ihe gbasara koodu gị.

Jidesie ọkọlọtọ

Gbalịa ka ị ghara iji ihe dabere n'elu ikpo okwu ma ọ bụrụ na e nwere ọkọlọtọ analogues, ma ọ bụrụ na ị na-enweghị ike ime na-enweghị ha, kechie ha na pụrụ iche blocks maka macros (ma ọ bụ ihe ọzọ) na nnọọ ekwela ka achịkọta koodu gị n'okpuru ọnọdụ akwadoghị.

Jidesie ike n'usoro ọmụmụ ihe eji arụ ọrụ

Mgbakwunye ga-abụ mgbakwunye, ịba ụba ga-abụrịrị ịba ụba, oku ọrụ ga-abụ oku ọrụ, nnomi ga-abụ oyiri, ebu ga-eburịrị, akpa ga-eburịrị, iterator ga-enwerịrị nkwalite. ++ na nkwụsịtụ *. Na ihe ndị ọzọ na ndị ọzọ.

Echere m na echiche ahụ doro anya. Enwere mgbakọ n'usoro na-adịghị ejikọta, mana ndị ọrụ na ndị na-agụ koodu gị na-atụ anya ịhụ. Agbalịla ịrata ndị ọzọ, ma ọ bụghị na ị ga-emegbu onwe gị.

Dee koodu dakọtara

Nke mbụ, m na-ekwu na ọkọlọtọ ọba akwụkwọ. Ọ bụ ihe na-achọsi ike na enwere ike iji oghere nke klaasị na ọrụ gị jiri ọkọlọtọ na ọba akwụkwọ ndị ọzọ (dịka ọmụmaatụ, Boost).

Enwere onwe gị ilele anya na oghere STL na Boost. Ewezuga ihe ndị a na-adịghị ahụkebe, ị ga-ahụ onye nlereanya tozuru oke n'ebe ahụ.

Jiri ngwa ndị mepere emepe mee ihe kacha mma

Maka otu nyocha ahụ static, enwere opekata mpe abụọ mepere emepe nke enwere ike ijikọ naanị otu ugboro na ọrụ ọ bụla nwere sistemụ nrụpụta CMake.

Ị nwere ike ịgụkwu gbasara nke a n'akwụkwọ m na nso nso a.

Afterword

N'ikpeazụ, ọ ga-amasị m imesi ike na anaghị m akwado ka m ghara iji PVS ma ọ bụ ihe nyocha ọ bụla ọzọ static. Mana ana m agba gị ume ka ị chee echiche otu o siri mee na onye nyocha static na-ahụta njehie dị ukwuu na koodu gị mgbe niile.

Nke a bụ naanị nsonaazụ. Anyị kwesịrị ịchọ ma kpochapụ ihe kpatara ya.

isi: www.habr.com

Tinye a comment