Uphononongo oluzimeleyo lwePVS-Studio (Linux, C ++)

Ndabona upapasho olwathi iPVS yalufunda ukuhlalutya phantsi kweLinux, kwaye ndagqiba kwelokuba ndiyizame kwiiprojekthi zam. Kwaye oku kuphuma kuyo.


Iziqulatho

  1. ΠŸΠ»ΡŽΡΡ‹
  2. ΠœΠΈΠ½ΡƒΡΡ‹
  3. Iziphumo
  4. Emva kwegama

ΠŸΠ»ΡŽΡΡ‹

Inkxaso ephendulayo

Ndacela isitshixo sesilingo baza bandithumelela sona kwangaloo mini.

Amaxwebhu acacileyo

Sikwazile ukuqalisa i-analyzer ngaphandle kweengxaki. Uncedo lwemiyalelo yeconsole lukwakhona (nangona kukho izikhalazo apha, bona icandelo ΠœΠΈΠ½ΡƒΡΡ‹).

Ukubakho kohlalutyo lwemisonto emininzi

I-analyzer inokhetho "oluqhelekileyo". -j, ukuvumela uhlalutyo lwenziwe ngokuhambelanayo kwimisebenzi emininzi. Oku konga ixesha elininzi.

Ukubona kakuhle

Iifomati ezininzi zemveliso ezahlukeneyo, ukusuka kwisicatshulwa ukuya kumlomo omncinci wewebhu. Ujongano lwewebhu lufanelekile, lufutshane, luneengcebiso ecaleni kwemigca kwikhowudi kunye namakhonkco kwiinkcazo zokuxilonga..

Ukuhlanganiswa okulula kwindibano

Onke amaxwebhu akwiwebhusayithi yabo, ndingatsho kuphela ukuba ukuba iprojekthi yakho yakhiwe kusetyenziswa iCMake, ke yonke into ilula kakhulu.

Iinkcazo ezilungileyo zokuxilonga

Ukuba uvelisa imveliso kwimowudi fullhtml, ngoko umyalezo ngamnye unekhonkco kwinkcazo yokuxilonga, kunye neenkcazo, imizekelo yekhowudi kunye neekhonkco ezongezelelweyo.

ΠœΠΈΠ½ΡƒΡΡ‹

Ukungazi kakuhle ulwimi lwe-C ++ ngumhlalutyi

Ngelishwa, i-PVS ngamanye amaxesha yenza iimpazamo zesintaksi kwaye ivelise imiyalezo emihle yobuxoki xa ikhowudi ichanekile ngokupheleleyo.

Umzekelo, kukho umsebenzi obuyayo 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));
}

Ewe ligama eliphambili auto Inokuthetha void, yiyo loo nto auto. Kodwa i-PVS ivelise le miyalezo ilandelayo:

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.

Indawo ecothayo kakhulu

Ewe, kwi-web interface ecaleni komyalezo ngamnye kukho ikhonkco kwinkcazo yokuxilonga ehambelana nemizekelo. Kodwa xa ucofa ikhonkco, kufuneka ulinde ixesha elide, kwaye ngamanye amaxesha kuyenzeka 504 IXESHA lokuphuma.

ULwimi

Zonke iinkcazo zifumaneka ngesiRashiya, nto leyo intle. Kodwa amakhonkco avela kwingxelo ahlala ekhokelela kwinguqulelo yesiNgesi. Kuya kuba kuhle ukukwazi ukutshintsha ulwimi ukuze ukwazi ukujonga ukuxilongwa kwangoko ngesiRashiya. Khange ndifumane ukhetho olunjalo kujongano.

Kuyaphazamisa ukusebenza kunye namanqanaba oxilongo nge-console

Masiqale ngento yokuba kusetyenziswe imiyalelo emibini (le pvs-studio-analyzer ΠΈ plog-converter) iindlela ezahlukeneyo zokuchaza uxilongo.

Uncedo lwe pvs-studio-analyzer iyafunda:

-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

Ndichithe ixesha elide ndizama ukucinga ukuba mandiye ngaphi yongeza (β€œukongeza amaxabiso”) amaqhosha. Ndizamile ukuzidwelisa zahlulwe ziikoma:

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

Ndizame ukubhalisa isitshixo amaxesha amaninzi:

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

Kulapho ndaye ndabona ukuba ezi yayiziimaski! Kwaye kufuneka shwankathela, kwaye akunjalo yongeza iintsingiselo. Umzekelo, ukufumana uxilongo oluqhelekileyo, uxilongo lwe-micro-optimizations kunye ne-MISRA, kufuneka uzishwankathele (4 + 8 + 32 = 44):

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

Ukusebenzisa ii-bitmasks kujongano lomsebenzisi ngokuqhelekileyo kuyifomu embi. Konke oku kunokushwankathelwa ngaphakathi, kwaye iseti yeeflegi zinokumiselwa umsebenzisi.

Ukongeza, kukho kwakhona usetyenziso plog-converter, eyenza ulwazi lohlalutyo lwe-static olufundeka ngabantu. Unezinye iingxaki.

Uncedo lwenkqubo plog-converter Iingxelo:

-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

Amanye "amanqanaba" avele apha awayengekho ngaphambili, kwaye andizange ndifumane nto malunga nawo kumaxwebhu.

Ngokubanzi, akucaci. Yiyo loo nto ndibeka yonke into phezulu.

Iqela lezidenge ziyathuka kuBamba

Ezimbini kwiiprojekthi ezintathu endizihlalutyileyo zisebenzisa ithala leencwadi lovavanyo Catch2. Kwaye isabelo sengonyama semiyalezo (!!! 90 ngaphandle kwe-138 kwenye kunye ne-297 ngaphandle kwe-344 kwenye !!!) inale fomu ilandelayo:

Uphononongo oluzimeleyo lwePVS-Studio (Linux, C ++)

Ayithatheli ngqalelo i-multithreading

Kukho izinto ezininzi ezingeyonyani malunga neenguqu ezingaguqukiyo okanye iilophu ezingenasiphelo, ngelixa ukusebenza kwezi ziguquguqukayo kwenzeka kwimisonto eyahlukeneyo, kwaye ukuba oku bekungenjalo, iimvavanyo zeyunithi bezingayi kusebenza.

Uphononongo oluzimeleyo lwePVS-Studio (Linux, C ++)

Nangona kunjalo, ngaba umhlalutyi ongatshintshiyo unokuthatha ingqalelo oku? Ndazi.

Iziphumo

I-PVS ayifumananga naziphi na iibhugi kwiiprojekthi zam zomthombo ovulekileyo igqabhukile ΠΈ Kufuphi, kunye nakwidrafti yokusebenza, leyo, ngenxa yezizathu ezicacileyo, andinakuyibonisa. Kuyinyani, kufanelekile ukukhumbula ukuba ezinye iintsilelo sele zibanjiwe kwaye zilungiswe kwangaphambili usebenzisa Cppcheck ΠΈ scan-build.

Ngokubanzi, impembelelo evela kubo bonke aba bahlalutyi iphantse ifane: ewe, babamba into ethile, ngamanye amaxesha nento ebalulekileyo, kodwa ngokubanzi umqambi wanele.

Kuyenzeka (kwaye mna ngokobuqu ndiyathanda ukucinga njalo) ukuba iqela lethu lisebenzise iinkqubo zophuhliso lwesoftware esivumela ukuba sivelise ubuncinci bekhowudi ye-shitty. Kungcono ukungazidali iingxaki kunokuzoyisa ngobugorha.

Ngoko ke, ndithatha inkululeko yokunika iingcebiso malunga nendlela yokubhala kwi-C ++ ngendlela yokuba ungadubuli imilenze yomntu okanye ubethe nabani na ebunzi ngeraki.

Yenza uninzi loxilongo lomqokeleli

Iqela lethu lisebenzisa (kwaye likucebisa ukuba) olu khetho lulandelayo luhlanganiselwe:

-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

Yenza ukuba zisebenze kwiprojekthi yakho kwaye ufunde okuninzi malunga nekhowudi yakho.

Namathela kumgangatho

Zama ukungasebenzisi izinto ezixhomekeke kwiqonga ukuba kukho ii-analogues eziqhelekileyo, kwaye ukuba awukwazi ukwenza ngaphandle kwazo, zisonge kwiibhloko ezikhethekileyo zeemacros (okanye enye into) kwaye ungavumeli ikhowudi yakho ihlanganiswe phantsi kweemeko ezingaxhaswanga.

Namathela kwisemantics yokusebenza esemgangathweni

Ukongezwa kufuneka kongezwe, uphinda-phindo maluphindaphindeke, ukufowunelwa komsebenzi makube lubizo lomsebenzi, ikopi mayibe yikopi, ithwalwe, isikhongozeli masiphindaphindeke, umphinda-phindwa kufuneka anyuswe. ++ kunye nokunciphisa *. Kwaye njalo njalo njalo.

Ndicinga ukuba ingcamango icacile. Kukho iindibano ezisekiweyo ezingabopheleliyo, kodwa ukuba bonke abasebenzisi kunye nabafundi bekhowudi yakho balindele ukuyibona. Musa ukuzama ukoyisa abanye, kungenjalo uya kuzenza ngaphezu kwakho.

Bhala ikhowudi ehambelanayo

Okokuqala, ndithetha ilayibrari eqhelekileyo. Kunqweneleka kakhulu ukuba ujongano lweeklasi zakho kunye nemisebenzi inokusetyenziselwa umgangatho kunye namanye amathala eencwadi (umzekelo, uBoost).

Zive ukhululekile ukuba ujonge kwi-STL kunye ne-Boost interfaces. Ngaphandle kwezinto ezinqabileyo, uya kubona umzekelo ofanelekileyo apho.

Yenza uninzi lwezixhobo zomthombo ovulekileyo

Kuhlalutyo olufanayo lwe-static, kukho ubuncinci izixhobo ezibini ezivulekileyo zasimahla ezinokudityaniswa kanye kuyo nayiphi na iprojekthi ngenkqubo yokwakha ye-CMake.

Unokufunda ngakumbi malunga noku kupapasho lwam lwakutsha nje.

Emva kwegama

Ekugqibeleni, ndingathanda ukugxininisa ukuba andikhuthazi ukuba ndingasebenzisi i-PVS okanye nayiphi na enye i-static analyzers. Kodwa ndiyakukhuthaza ukuba ucinge malunga nendlela eyenzeka ngayo ukuba umhlalutyi we-static uhlala efumana iimpazamo ezibalulekileyo kwikhowudi yakho.

Lo ngumphumo nje. Kufuneka sikhangele kwaye siphelise unobangela.

umthombo: www.habr.com

Yongeza izimvo