Yakazvimirira wongororo yePVS-Studio (Linux, C ++)

Ndakaona chinyorwa icho PVS yakanga yadzidza kuongorora pasi peLinux, uye ndakafunga kuiedza pamapurojekiti angu. Uye izvi ndizvo zvakabuda mairi.


Zviri mukati

  1. ΠŸΠ»ΡŽΡΡ‹
  2. ΠœΠΈΠ½ΡƒΡΡ‹
  3. Migumisiro
  4. Afterword

ΠŸΠ»ΡŽΡΡ‹

Responsive support

Ndakakumbira kiyi yekuedza uye vakanditumira zuva rimwe chete.

Zvinyorwa zvakajeka

Takakwanisa kuvhura analyzer pasina kana dambudziko. Rubatsiro rwemirairo ye console rwunowanikwawo (kunyangwe paine zvichemo pano, ona chikamu ΠœΠΈΠ½ΡƒΡΡ‹).

Kugona kwekuongorora kwakasiyana-siyana

Iyo analyzer ine "standard" sarudzo -j, zvichibvumira kuongorora kuti kuitwe mukuwirirana mumabasa akawanda. Izvi zvinoponesa nguva yakawanda.

Kuona kwakanaka

Mafomati akawanda akasiyana ekubuda, kubva pamavara kusvika padiki webhu muzzle. Iyo yewebhu interface iri nyore, yakapfupika, ine mazano padyo nemitsetse mukodhi uye zvinongedzo kune tsananguro yekuongorora..

Kubatanidza nyore mugungano

Zvese zvinyorwa zviri pawebhusaiti yavo, ndinogona kungotaura kuti kana chirongwa chako chikavakwa uchishandisa CMake, saka zvese zviri nyore.

Tsanangudzo dzakanaka dzekuongorora

Kana iwe ukagadzira zvakabuda mumodhi fullhtml, ipapo meseji yega yega ine chinongedzo kune tsananguro yekuongorora, ine tsananguro, mienzaniso yekodhi uye zvimwe zvinongedzo.

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

Kusaziva mutauro weC ++ neanalyzer

Nehurombo, PVS dzimwe nguva inoita zvikanganiso zve syntax uye inogadzira meseji yenhema kana iyo kodhi yakanyatso kurongeka.

Somuenzaniso, pane basa rinodzoka 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));
}

Hongu ndiro izwi rakakosha auto Inogona kureva void, ndozvazviri motokari. Asi PVS yakaburitsa iwo anotevera mameseji:

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.

Yakanyanya kunonoka saiti

Ehe, muwebhu interface padhuze nemeseji yega yega pane chinongedzo kune inoenderana diagnostic tsananguro ine mienzaniso. Asi kana iwe ukadzvanya pane chinongedzo, unofanirwa kumirira nguva yakareba, uye dzimwe nguva zvinoitika 504 Gateway Nguva-yakabuda.

Mutauro

Tsanangudzo dzese dziri muRussia, izvo zvakanaka. Asi zvinongedzo kubva mushumo zvinogara zvichitungamira kune vhezheni yeChirungu. Zvingave zvakanaka kukwanisa kushandura mutauro kuti iwe ugone kuona diagnostics nekukasira muRussia. Ini handina kuwana sarudzo yakadaro mune interface.

Hazvina kunaka kushanda nemazinga ekuongorora kuburikidza neiyo console

Ngatitange nenyaya yekuti mirairo miviri yakashandiswa (iyi pvs-studio-analyzer ΠΈ plog-converter) mafomati akasiyana ekutsanangudza diagnostics.

Help for pvs-studio-analyzer inoverenga:

-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

Ndakaita nguva refu ndichiedza kufunga kuti ndoenda kupi wedzera ("adding the values") makiyi. Ndakaedza kuzvinyora zvakapatsanurwa nemakoma:

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

Ndakaedza kunyoresa kiyi kakawanda:

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

Uye ndipo pandakazoziva kuti aya aive masiki! Uye unofanira pfupikisaasi kwete wedzera zvinoreva. Semuenzaniso, kuti uwane zvakajairwa diagnostics, diagnostics yemicro-optimizations uye MISRA, unofanirwa kuzvipfupikisa (4 + 8 + 32 = 44):

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

Kushandisa bitmasks mumashandisi emushandisi kazhinji yakashata fomu. Zvese izvi zvinogona kupfupikiswa mukati, uye seti yemureza inogona kuisirwa mushandisi.

Mukuwedzera, kune zvakare kushandiswa plog-converter, iyo inogadzira ruzivo rwekuongorora ruzivo rwevanhu. Ane mamwe matambudziko.

Batsira purogiramu plog-converter inoshuma:

-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

Mamwe "mazinga" akaonekwa pano akange asipo kare, uye ini handina kuwana chero chinhu pamusoro pawo mune zvinyorwa.

Kazhinji, hazvina kujeka. Ndiko kusaka ndakaisa zvese kusvika pakakwirira.

Boka remapenzi richituka paBata

Maviri emapurojekiti matatu andakaongorora anoshandisa raibhurari yekuyedza yeyuniti Catch2. Uye chikamu cheshumba chemashoko (!!! 90 kubva pa138 mune imwe uye 297 kunze kwe344 mune imwe !!!) vane fomu rinotevera:

Yakazvimirira wongororo yePVS-Studio (Linux, C ++)

Haisi kurangarira multithreading

Kune akawanda emanyepo ekunyepa pamusoro anofungidzirwa kusachinjika kana zvishwe zvisingaperi, nepo kushanda neaya mavhezheni kunoitika kubva kune akasiyana shinda, uye dai zvisina kudaro, bvunzo dzeyuniti dzaisazoshanda.

Yakazvimirira wongororo yePVS-Studio (Linux, C ++)

Nekudaro, iyo static analyzer inogona kutofunga izvi? Kusaziva.

Migumisiro

PVS haina kuwana chero tsikidzi mune yangu yakavhurika sosi mapurojekiti Burst ΠΈ Inotevera, pamwe chete muchirongwa chekushanda, icho, nokuda kwezvikonzero zviri pachena, handigoni kupa. Ichokwadi, zvakakosha kuyeuka kuti zvimwe zvikanganiso zvakatobatwa uye zvakagadziriswa kare kushandisa Cppcheck ΠΈ scan-build.

Kazhinji, fungidziro kubva kune ese aya analyzer inenge yakafanana: hongu, vanobata chimwe chinhu, dzimwe nguva kunyange chinhu chakakosha, asi zvakazara muunganidzi zvakakwana.

Zvinogoneka (uye ini pachangu ndinoda kufunga kudaro) kuti timu yedu inoshandisa maitiro ekuvandudza software ayo anotitendera kuburitsa hushoma huwandu hweshitty kodhi. Zviri nani kusagadzira matambudziko pane kuakunda nehugamba.

Naizvozvo, ndinotora rusununguko rwekupa zano rekunyora muC ++ nenzira yekuti usapfure makumbo emunhu chero upi zvake kana kurova chero munhu pahuma nereki.

Gadzirisa zvakanyanya compiler diagnostics

Chikwata chedu chinoshandisa (uye chinokupa zano kuti) zvinotevera kuunganidza sarudzo:

-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

Vagonese mupurojekiti yako uye udzidze zvakawanda nezve kodhi yako.

Namatira kuchiyero

Edza kusashandisa zvinhu zvinotsamira papuratifomu kana paine akajairwa analogues, uye kana iwe usingakwanise kuita pasina iwo, zviputire mumabhururu akakosha e macros (kana chimwe chinhu) uye usangoita kuti kodhi yako iumbwe pasi pemamiriro asina kutsigirwa.

Namira kune yakajairwa oparesheni semantics

Kuwedzera kunofanirwa kunge kuri kuwedzera, kuwanda kunofanirwa kunge kuri kuwanda, kufona kwekuita kunofanirwa kunge kuri kufona kwekuita, kopi inofanirwa kuve kopi, kutakura kunofanirwa kutakura, mudziyo unofanirwa kuverengeka, iterator inofanirwa kusimudzirwa. ++ uye kuregeredza *. Uye zvichingodaro zvichingodaro.

Ndinofunga kuti pfungwa yacho yakajeka. Kune magungano akasimbiswa asina kusunga, asi ayo vese vashandisi uye vaverengi vekodhi yako vanotarisira kuona. Usaedze kukurira vamwe, ukasadaro uchazvikurira iwe pachako.

Nyora kodhi inoenderana

Chekutanga, ndinoreva raibhurari yakajairika. Izvo zvinodikanwa kwazvo kuti maratidziro emakirasi ako uye mabasa anogona kushandiswa neyakajairwa uye mamwe maraibhurari (semuenzaniso, Boost).

Inzwa wakasununguka kutarisa iyo STL uye Boost interfaces. Nezvisizvo zvisingawanzo, iwe uchaona akakodzera muenzaniso ipapo.

Ita zvakanyanya zvekushandisa zvakavhurika

Kune imwechete static ongororo, kune angangoita maviri akavhurika emahara maturusi anogona kubatana kamwe chete kune chero chirongwa neCMake kuvaka system.

Unogona kuverenga zvakawanda pamusoro peizvi mubhuku rangu razvino.

Afterword

Chekupedzisira, ndinoda kusimbisa kuti handisi kukurudzira kusashandisa PVS kana chero imwe static analyzer. Asi ini ndinokukurudzira kuti ufunge nezve zvakaitika kuti iyo static analyzer inogara ichiwana zvikanganiso zvakakosha mukodhi yako.

Izvi zvinongova mugumisiro. Tinofanira kutsvaga uye kubvisa chikonzero.

Source: www.habr.com

Voeg