Dib u eegis madax banaan ee PVS-Studio (Linux, C++)

Waxaan arkay daabacaad ay PVS ka baratay in lagu falanqeeyo Linux hoosteeda, oo waxaan go'aansaday inaan tijaabiyo mashaariicdayda. Waana tan ka soo baxday.


Tusmo

  1. Maqaallo
  2. Minusa
  3. Natiijooyinka
  4. Kadib

Maqaallo

Taageero jawaab celin ah

Waxaan codsaday furaha tijaabada waxayna ii soo direen isla maalintaas.

Dukumeenti cad oo cad

Waxaan ku guuleysanay inaan bilowno falanqeeye dhib la'aan. Caawinta amarrada konsole sidoo kale waa la heli karaa (inkasta oo ay jiraan cabashooyin halkan, eeg qaybta Minusa).

Suurtagalnimada falanqaynta dunta badan

Falanqeeyaha wuxuu leeyahay ikhtiyaar "standard". -j, ogolaanaysa in falanqaynta lagu fuliyo si barbar socda hawlo dhowr ah. Tani waxay badbaadinaysaa waqti badan.

Muuqaal wanaagsan

Noocyo badan oo wax soo saar oo kala duwan, laga bilaabo qoraalka ilaa xakame yar oo shabakad ah. Isku xirka shabakadu waa mid ku haboon, kooban, oo leh tilmaamo ku xiga xariiqyada koodka iyo isku xirka sharaxaadaha ogaanshaha.

Isdhexgalka fudud ee golaha

Dhammaan dukumeentiyadu waxay ku yaalaan shabakadooda, waxaan dhihi karaa oo kaliya haddii mashruucaaga la dhisay iyadoo la adeegsanayo CMake, markaa wax walba waa mid aad u fudud.

Sharaxaada ogaanshaha wanaagsan

Haddii aad soo saarto qaab ahaan fullhtml, markaa fariin kastaa waxay leedahay xiriiriye sifayn ogaanshaha, oo leh sharraxaad, tusaalooyin code iyo xiriirin dheeraad ah.

Minusa

Jaahilnimada luqadda C++ ee falanqeeyuhu

Nasiib darro, PVS mararka qaarkood waxay samaysaa khaladaadka syntax waxayna abuurtaa farriimaha beenta ah marka koodku sax yahay.

Tusaale ahaan, waxaa jira hawl soo noqota 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));
}

Haa waa ereyga muhiimka ah auto Macnaheedu waa void, taasi waa waxa loogu talagalay baabuur. Laakiin PVS waxay soo saartay fariimahan soo socda:

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.

Goob aad u gaabis ah

Haa, interface-ka shabakada ee ku xigta fariin kasta waxaa jira xiriiriye u dhigma sharaxaadda ogaanshaha oo leh tusaalooyin. Laakiin marka aad gujiso xiriirinta, waa inaad sugtaa waqti dheer, mararka qaarkoodna way dhacdaa 504 Gateway Time-out.

Π―Π·Ρ‹ΠΊ

Dhammaan sharraxaadaha waxay ku qoran yihiin Ruush, taas oo aad u fiican. Laakin xiriirinta warbixinta ayaa had iyo jeer u horseeda nooca Ingiriisiga. Way fiicnaan lahayd inaad awood u yeelato inaad beddesho luqadda si aad u aragto ogaanshaha isla markiiba Ruush. Anigu ma helin ikhtiyaarka noocan oo kale ah interface-ka.

Ma fududa in lagu shaqeeyo heerarka ogaanshaha iyada oo loo marayo console-ka

Aan ku bilowno xaqiiqda ah in labada amar la isticmaalay (kan pvs-studio-analyzer ΠΈ plog-converter) qaabab kala duwan oo lagu qeexo ogaanshaha.

Caawinta pvs-studio-analyzer akhriyey:

-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

Waxaan waqti dheer ku qaatay inaan ogaado meel aan aado ku dar ("ku dar qiyamka") furayaasha. Waxa aan isku dayay in aan ku liso iyaga oo ay kala sooceen:

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

Waxaan isku dayay inaan furaha diiwaan geliyo dhowr jeer:

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

Oo markaas uun baan ogaaday in kuwani ay ahaayeen maaskaro yar! Oo aad u baahan tahay soo koobidiyo ma ku dar macnaha. Tusaale ahaan, si aad u hesho ogaanshaha guud, ogaanshaha wax-soo-saarka-yar-yar iyo MISRA, waxaad u baahan tahay inaad soo koobto (4 + 8 + 32 = 44):

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

Isticmaalka 'bitmasks' ee is-dhexgalka isticmaalaha guud ahaan waa qaab xun. Waxaas oo dhan waxaa lagu soo koobi karaa gudaha, iyo calamo ayaa loo dejin karaa isticmaalaha.

Intaa waxaa dheer, waxaa sidoo kale jira utility plog-converter, kaas oo soo saara macluumaadka falanqaynta taagan ee bini'aadamku akhrin karo. Dhibaatooyin kale ayay haysataa.

Caawinta barnaamijka plog-converter ayaa sheegaysa:

-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

Qaar ka mid ah "heerarka" ayaa halkan ka muuqday oo aan horay u jirin, oo aanan waxba ka helin dukumeentiyada midkoodna.

Guud ahaan, ma cadda. Taasi waa sababta aan wax walba u dhigay heerka ugu sarreeya.

Catch nacas ah oo caydh ah

Laba ka mid ah saddexda mashruuc ee aan falanqeeyay waxay isticmaalaan maktabadda tijaabada cutubka Qabashada2. Farriimaha qaybta libaaxa (!!! 90 ka mid ah 138 ka mid ah iyo 297 ka mid ah 344 ee kale!!!) waxay leeyihiin qaabkan soo socda:

Dib u eegis madax banaan ee PVS-Studio (Linux, C++)

Aan xisaabta ku darsanayn isku xidhka badan

Waxaa jira waxyaabo badan oo been abuur ah oo ku saabsan doorsoomayaal aan isbeddelayn ama wareegyo aan dhammaad lahayn, halka la shaqeynta doorsoomayaashani ay ka yimaadaan dun kala duwan, iyo haddii tani aysan sidaas ahayn, markaa imtixaannada cutubku ma shaqeyn doonaan.

Dib u eegis madax banaan ee PVS-Studio (Linux, C++)

Si kastaba ha ahaatee, falanqeeye taagan xitaa ma ku xisaabtami karaa tan? Ma garanayo.

Natiijooyinka

PVS kama helin wax kutaanno dhab ah mashaariicda ishayda furan qarxaan ΠΈ Xiga, iyo sidoo kale qabyo-qowl shaqo, taas oo, sababo cad dartood, aanan soo bandhigi karin. Run, waxaa habboon in maskaxda lagu hayo in cilladaha qaarkood mar hore la qabtay oo la saxay mar hore iyadoo la isticmaalayo Cppcheck ΠΈ scan-build.

Guud ahaan, aragtida dhammaan falanqeeyayaashan waa isku mid: haa, waxay qabtaan wax, mararka qaarkood xitaa wax muhiim ah, laakiin guud ahaan isku-dubariduhu waa ku filan yahay.

Waa suurtogal (iyo anigu shakhsi ahaan waxaan jeclahay inaan sidaas u fekero) in kooxdeena ay isticmaalaan hababka horumarinta software ee noo ogolaanaya inaan abuurno qadarka ugu yar ee koodka shitty. Waxaa fiican in aan dhibaato la abuurin intii si geesinimo leh looga adkaan lahaa.

Sidaa darteed, waxaan xor u ahay inaan siiyo xoogaa talo ah oo ku saabsan sida loogu qoro C++ si aan qofna lugaha looga toogan ama qofna loogu dhufan wejiga.

Si fiican uga faa'iidayso ogaanshaha isku-darka

Kooxdayadu waxay adeegsataa (oo waxay kugula talinaysaa) xulashooyinka soo socda ee ururinta:

-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

U oggolow iyaga mashruucaaga oo wax badan ka baro koodkaaga.

Ku dheji heerka

Isku day inaadan isticmaalin waxyaabo ku tiirsan madal haddii ay jiraan analogues caadiga ah, iyo haddii aadan gabi ahaanba awoodin la'aantood, ku duub baloogyo gaar ah oo loogu talagalay macro (ama shay kale) oo si fudud ha u oggolaan in koodhkaaga lagu soo ururiyo xaalado aan la taageerin.

Ku dheggan macnaha hawlgalka caadiga ah

Wax-ku-darku waa inuu ahaadaa isku-dhufasho, isku-dhufasho waa inuu noqdaa isku-dhufasho, wicitaanka shaqada waa inuu noqdaa shaqo-wac, koobi waa inuu noqdaa mid koobi ah, waa in la xambaaraa, weel la qaadi karo, waa inuu noqdaa mid la cusbooneysii karo, waa inuu leeyahay dallacaad. ++ iyo dib u dhigista *. Iyo wixi la mida iyo wixi la mida.

Waxaan filayaa in fikraddu ay caddahay. Waxa jira xeerar la aasaasay oo aan xidhnayn, laakiin dhammaan isticmaalayaasha iyo akhristayaasha koodkaagu ay filayaan inay arkaan. Ha isku dayin in aad dadka kale ka dhaadhiciso, haddii kale adigaa iska dhaafi doona.

Qor kood ku habboon

Marka hore, waxaan ula jeedaa maktabadda caadiga ah. Waxaa aad loo jecel yahay in is dhex galka fasalladaada iyo shaqooyinkaaga loo isticmaali karo heerar iyo maktabado kale (tusaale, Kobcinta).

Dareen xor u ah inaad eegto STL iyo kor u qaadida isdhexgalka. Marka laga reebo naadir, waxaad halkaas ku arki doontaa qof ku dayasho mudan.

Ka faa'iidayso agabka il furan

Falanqaynta isku midka ah, waxaa jira ugu yaraan laba qalab oo furan oo bilaash ah kuwaas oo lagu xidhi karo hal mar mashruuc kasta oo leh nidaamka dhismaha CMake.

Waxaad ka akhrisan kartaa wax badan oo arrintan ku saabsan daabacaaddaydii dhowayd.

Kadib

Ugu dambeyntii, waxaan jeclaan lahaa inaan carrabka ku adkeeyo inaanan u doodin inaanan isticmaalin PVS ama falanqeeyayaasha kale ee taagan. Laakiin waxaan kugu dhiirigelinayaa inaad ka fikirto sida ay u dhacday in falanqeeyaha joogtada ahi uu si joogto ah u helo khaladaad muhiim ah koodkaaga.

Tani waa uun cawaaqib. Waxaan u baahanahay inaan raadino oo meesha ka saarno sababta.

Source: www.habr.com

Add a comment