Tlhahlobo e ikemetseng ea PVS-Studio (Linux, C ++)

Ke bone sengoliloeng seo PVS e ithutileng ho se hlahloba tlas'a Linux, 'me ka etsa qeto ea ho e leka mererong ea ka. 'Me sena ke se tsoileng ho eona.


Tse ka hare

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

Плюсы

Tšehetso e arabelang

Ke ile ka kopa senotlolo sa teko eaba ba nthomella sona letsatsing lona leo.

Litokomane tse hlakileng hantle

Re khonne ho qala analyzer ntle le mathata. Thuso bakeng sa litaelo tsa console e boetse e fumaneha (le hoja ho na le litletlebo mona, bona karolo Минусы).

Monyetla oa tlhahlobo ea likhoele tse ngata

Analyzer e na le khetho ea "standard". -j, ho lumella hore tlhahlobo e etsoe ka mokhoa o ts'oanang mesebetsing e mengata. Sena se boloka nako e ngata.

Ponahalo e ntle

Lifomate tse ngata tse fapaneng tsa tlhahiso, ho tloha ho mongolo ho isa ho mouzzle o monyane oa tepo. Sehokelo sa webo se bonolo, se khuts'oane, se na le lintlha tse haufi le mela ea khoutu le lihokela tsa litlhaloso tsa tlhahlobo..

Ho kopanya habonolo ho kopano

Litokomane tsohle li ho websaeteng ea bona, nka re feela haeba morero oa hau o hahiloe ho sebelisa CMake, joale ntho e 'ngoe le e' ngoe e bonolo haholo.

Litlhaloso tse ntle tsa tlhahlobo ea mafu

Haeba o hlahisa tlhahiso ka mokhoa fullhtml, joale molaetsa o mong le o mong o na le sehokelo sa tlhaloso ea tlhahlobo, ka litlhaloso, mehlala ea khoutu le lihokelo tse eketsehileng.

Минусы

Ho hloka tsebo ea puo ea C ++ ka mohlahlobi

Ka bomalimabe, ka linako tse ling PVS e etsa liphoso tsa syntax mme e hlahisa melaetsa e fosahetseng ea bohata ha khoutu e nepahetse ka ho feletseng.

Mohlala, ho na le ts'ebetso e khutlang 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));
}

E, lentsoe la sehlooho auto E ka bolela void, ke seo e leng sona koloi. Empa PVS e hlahisitse melaetsa e latelang:

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.

Sebaka se liehang haholo

E, ho web interface haufi le molaetsa o mong le o mong ho na le sehokelo sa tlhaloso e lumellanang ea tlhahlobo e nang le mehlala. Empa ha o tobetsa sehokelo, o tlameha ho ema nako e telele, 'me ka linako tse ling hoa etsahala 504 Gateway Timeout.

Puo

Litlhaloso tsohle li ka Serussia, tse ntle haholo. Empa likhokahano tse tsoang tlalehong li lula li lebisa phetolelong ea Senyesemane. Ho ka ba monate ho khona ho fetola puo e le hore u ka sheba tlhahlobo ea mafu hang-hang ka Serussia. Ha kea fumana khetho e joalo ho sehokelo.

Ha ho bonolo ho sebetsa le maemo a tlhahlobo ka console

Ha re qaleng ka taba ea hore ho sebelisitsoe litaelo tse peli (sena pvs-studio-analyzer и plog-converter) mefuta e fapaneng ea ho hlakisa tlhahlobo.

Thuso bakeng sa pvs-studio-analyzer e baleha tjena:

-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

Ke ile ka qeta nako e telele ke leka ho nahana hore na ke ee hokae eketsa ("adding the values") linotlolo. Ke lekile ho li thathamisetsa li arotsoe ka lifeeloana:

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

Ke lekile ho ngolisa senotlolo makhetlo a 'maloa:

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

Ke ka nako eo feela ke ileng ka hlokomela hore tsena ke limaske tse nyane! 'Me u hloka akaretsa, eseng eketsa meelelo. Mohlala, ho fumana tlhahlobo e akaretsang, tlhahlobo ea li-micro-optimizations le MISRA, o hloka ho li akaretsa (4 + 8 + 32 = 44):

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

Ho sebelisa li-bitmasks ho li-interface tsa basebelisi hangata ke mokhoa o mobe. Tsena tsohle li ka akaretsoa ka hare, 'me sehlopha sa lifolakha se ka beoa bakeng sa mosebelisi.

Ho feta moo, ho boetse ho na le lisebelisoa plog-converter, e hlahisang tlhahisoleseding ea tlhahlobo e tsitsitseng e ka baloang ke batho. O na le mathata a mang.

Thuso bakeng sa lenaneo plog-converter e tlaleha:

-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

"Maemo" a mang a hlahile mona a neng a le sieo pele, 'me ha kea fumana letho ka bona litokomaneng.

Ka kakaretso, ha e hlake. Ke kahoo ke behileng ntho e 'ngoe le e' ngoe ho ea holimo.

Sehlopha sa mahlapa a sethoto ka Tšoasa

Merero e 'meli ho e meraro eo ke e hlahlobileng e sebelisa laebrari ea liteko tsa yuniti Catch2. Le karolo ea tau ea melaetsa (!!! 90 ho tsoa 138 ho o mong le 297 ho tsoa ho 344 ho e 'ngoe !!!) e na le mokhoa o latelang:

Tlhahlobo e ikemetseng ea PVS-Studio (Linux, C ++)

Ha e nahane ka multithreading

Ho na le lintlha tse ngata tse fosahetseng mabapi le lintho tseo ho thoeng ha li fetohe kapa li-loops tse sa feleng, ha ho sebetsa ka mefuta ena ho tsoa likhoeleng tse fapaneng, 'me haeba ho ne ho se joalo, liteko tsa yuniti li ne li ke ke tsa sebetsa.

Tlhahlobo e ikemetseng ea PVS-Studio (Linux, C ++)

Leha ho le joalo, na mohlahlobi oa static a ka nka taba ee? Ha ke tsebe.

Liphello

PVS ha e so fumane liphoso tsa 'nete mererong ea ka e bulehileng ea mohloli itšela и E 'ngoe, hammoho le moralo o sebetsang, oo, ka mabaka a hlakileng, nke keng ka o hlahisa. Ke 'nete, ho bohlokoa ho hopola hore mefokolo e meng e se e nkiloe le ho lokisoa pejana ho sebelisoa Cppcheck и scan-build.

Ka kakaretso, maikutlo a tsoang ho bahlahlobisisi bana bohle a batla a tšoana: e, ba tšoara ntho e itseng, ka linako tse ling esita le ntho ea bohlokoa, empa ka kakaretso moqapi o lekane.

Hoa khoneha ('me 'na ka boeena ke rata ho nahana joalo) hore sehlopha sa rona se sebelise mekhoa ea ntlafatso ea software e re lumellang ho hlahisa bonyane ba khoutu ea shitty. Ho molemo ho se hlahise mathata ho e-na le ho a hlōla ka sebete.

Ka hona, ke na le bolokolohi ba ho fana ka keletso ea ho ngola ka C ++ ka tsela ea hore ke se ke ka thunya mang kapa mang maotong kapa ho otla mang kapa mang phatleng ka rake.

Sebelisa hamolemo litlhahlobo tsa khokahanyo

Sehlopha sa rona se sebelisa ('me se u eletsa hore u) khetholle tse latelang:

-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

Li lumelle ho projeke ea hau 'me u ithute ho hongata ka khoutu ea hau.

Khomarela tekanyetso

Leka ho se sebelise lintho tse itšetlehileng ka sethaleng haeba ho na le li-analogues tse tloaelehileng, 'me haeba u sa khone ho etsa ntle le tsona, li phuthele ka li-blocks tse khethehileng bakeng sa macros (kapa ntho e' ngoe) 'me u se ke ua lumella khoutu ea hau hore e bokelloe tlas'a maemo a sa tšehetsoeng.

Khomarela semantics e tloaelehileng ea ts'ebetso

Keketso e tlameha ho ba tlatsetso, katiso e be katiso, mohala oa ts'ebetso e be mohala oa ts'ebetso, kopi e be kopi, e jaroe, setshelo se tlameha ho hlaka, setlatsi se tlameha ho phahamisoa. ++ le ho nyenyefatsa *. Le joalo-joalo.

Ke nahana hore mohopolo o hlakile. Ho na le litumellano tse thehiloeng tse sa tlameng, empa tseo basebelisi bohle le babali ba khoutu ea hau ba lebelletseng ho li bona. U se ke ua leka ho qhekella ba bang, ho seng joalo u tla ipabola.

Ngola khoutu e tsamaellanang

Pele ho tsohle, ke bolela laeborari e tloaelehileng. Ke ntho e lakatsehang haholo hore lihokelo tsa litlelase tsa hau le mesebetsi li ka sebelisoa le lilaebrari tse tloaelehileng le tse ling (mohlala, Boost).

Ikutloe u lokolohile ho sheba li-interface tsa STL le Boost. Ntle le mekhelo e sa tloaelehang, u tla bona mohlala o motle moo.

Sebelisa hamolemo lisebelisoa tse bulehileng

Bakeng sa tlhahlobo e ts'oanang ea static, bonyane ho na le lisebelisoa tse peli tse bulehileng tse ka hokahanngoang hang feela morerong ofe kapa ofe o nang le CMake build system.

U ka bala haholoanyane ka sena khatisong ea ka ea morao-rao.

Afterword

Qetellong, ke rata ho hatisa hore ha ke buelle ho se sebelise PVS kapa li-analyzer tse ling tse tsitsitseng. Empa ke u khothalletsa hore u nahane ka hore na ho etsahetse joang hore static analyzer e lula e fumana liphoso tse kholo khoutu ea hau.

Sena ke sephetho feela. Re lokela ho batla le ho felisa sesosa.

Source: www.habr.com

Eketsa ka tlhaloso