Léirmheas neamhspleách ar PVS-Studio (Linux, C++)

Chonaic mé foilseachán a d'fhoghlaim PVS chun anailís a dhéanamh faoi Linux, agus chinn mé é a thriail ar mo thionscadail féin. Agus seo é an rud a tháinig as.


Ábhar

  1. Son
  2. CONS
  3. Torthaí
  4. Afterword

Son

Tacaíocht sofhreagrach

D'iarr mé eochair thrialach agus sheol siad chugam an lá céanna í.

Doiciméadú measartha soiléir

D'éirigh linn an anailísí a sheoladh gan aon fhadhbanna. Tá cabhair le haghaidh orduithe consól ar fáil freisin (cé go bhfuil roinnt gearán anseo, féach an rannán CONS).

Féidearthacht anailís il-snáithithe

Tá rogha "caighdeánach" ag an anailísí -j, rud a fhágann gur féidir anailís a dhéanamh go comhthreomhar i roinnt tascanna. Sábhálann sé seo go leor ama.

Amharcléiriú maith

Go leor formáidí aschuir éagsúla, ó théacs go muzzle gréasáin beag. Tá an comhéadan gréasáin áisiúil, beacht, le leideanna in aice leis na línte sa chód agus naisc chuig tuairiscí diagnóiseacha.

Comhtháthú éasca isteach sa tionól

Tá na doiciméid go léir ar a láithreán gréasáin, ní féidir liom a rá ach má tá do thionscadal tógtha ag baint úsáide as CMake, ansin tá gach rud an-simplí.

Cur síos diagnóiseach maith

Má ghineann tú aschur i mód fullhtml, ansin tá nasc ag gach teachtaireacht le cur síos diagnóiseach, le mínithe, samplaí cód agus naisc bhreise.

CONS

Aineolas ar an teanga C++ ag an anailísí

Ar an drochuair, déanann PVS earráidí comhréire uaireanta agus gineann sé teachtaireachtaí dearfacha bréagacha nuair a bhíonn an cód go hiomlán ceart.

Mar shampla, tá feidhm ann a fhilleann 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));
}

Sea an eochairfhocal auto Is féidir a chiallaíonn void, sin an fáth atá leis carr. Ach tháirg PVS na teachtaireachtaí seo a leanas:

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.

Suíomh an-mhall

Sea, sa chomhéadan gréasáin in aice le gach teachtaireacht tá nasc chuig an gcur síos diagnóiseach comhfhreagrach le samplaí. Ach nuair a chliceálann tú ar nasc, caithfidh tú fanacht go leor ama, agus uaireanta tarlaíonn sé 504 Am Geata Geata.

Teanga

Tá gach tuairisc i Rúisis, rud iontach. Ach bíonn naisc ón tuairisc i gcónaí mar thoradh ar an leagan Béarla. Bheadh ​​sé go deas a bheith in ann an teanga a athrú ionas gur féidir leat diagnóisic a fheiceáil láithreach i Rúisis. Ní bhfuair mé a leithéid de rogha sa chomhéadan.

Tá sé deacair oibriú le leibhéil dhiagnóiseacha tríd an gconsól

Tosaímid leis an bhfíric gur úsáideadh an dá ordú (seo pvs-studio-analyzer и plog-converter) formáidí éagsúla chun diagnóisic a shonrú.

Cabhrú le haghaidh pvs-studio-analyzer léann:

-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

Chaith mé tamall fada ag iarraidh a dhéanamh amach cá háit le dul cuir leis (“ag cur na luachanna”) eochracha. Rinne mé iarracht iad a liostú scartha le camóga:

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

Rinne mé iarracht an eochair a chlárú arís agus arís eile:

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

Agus ní raibh ach ansin thuig mé go raibh na maisc giotán! Agus ní mór duit suim suasAgus ní cuir leis bríonna. Mar shampla, chun diagnóisic ghinearálta, diagnóisic le haghaidh micrea-optamúcháin agus MISRA a fháil, ní mór duit iad a achoimriú (4 + 8 + 32 = 44):

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

Is drochfhoirm go hiondúil é bitmasks a úsáid i gcomhéadain úsáideora. D'fhéadfaí achoimre a dhéanamh ar seo go léir go hinmheánach, agus d'fhéadfaí sraith bratacha a shocrú don úsáideoir.

Ina theannta sin, tá fóntais ann freisin plog-converter, a ghineann faisnéis anailíse statach inléite ag an duine. Tá fadhbanna eile aici.

Cabhrú le haghaidh an chláir plog-converter tuarascálacha:

-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

Bhí roinnt “leibhéil” le feiceáil anseo nach raibh ann roimhe seo, agus ní bhfuair mé aon rud mar gheall orthu sa doiciméadú ach an oiread.

Go ginearálta, níl sé soiléir. Sin an fáth a shocraigh mé gach rud go dtí an t-uasmhéid.

Dornán de mhionnaibh dúr ar Ghabháil

Úsáideann dhá cheann de na trí thionscadal a ndearna mé anailís orthu leabharlann tástála aonad Gabháil2. Agus tá an fhoirm seo a leanas ag sciar an leon de theachtaireachtaí (!!! 90 as 138 i gceann amháin agus 297 as 344 sa cheann eile!!!):

Léirmheas neamhspleách ar PVS-Studio (Linux, C++)

Ní chuireann sé san áireamh multithreading

Tá go leor rudaí bréagacha dearfacha ann maidir le hathróga nó lúba gan deireadh nach bhfuil aon athrú orthu, agus tarlaíonn obair leis na hathróga seo ó shnáitheanna éagsúla, agus mura mbeadh sé seo amhlaidh, ní oibreodh tástálacha aonaid.

Léirmheas neamhspleách ar PVS-Studio (Linux, C++)

Mar sin féin, is féidir le hanailíseoir statach fiú é seo a chur san áireamh? Níl a fhios agam.

Torthaí

Ní bhfuair PVS aon fhabhtanna fíor i mo thionscadail foinse oscailte Pléasctha и Ar Aghaidh, chomh maith le dréacht oibre, nach féidir liom a chur i láthair, ar chúiseanna soiléire. Fíor, is fiú a choinneáil i gcuimhne go bhfuil roinnt easnaimh gafa cheana féin agus a cheartú níos luaithe ag baint úsáide as Seiceáil cpp и scan-build.

Go ginearálta, tá tuiscint na n-anailíseoirí seo go léir mar an gcéanna: tá, glacann siad rud éigin, uaireanta fiú rud éigin tábhachtach, ach ar an iomlán is leor an tiomsaitheoir.

Is féidir (agus is maith liom go pearsanta smaoineamh amhlaidh) go n-úsáideann ár bhfoireann cleachtais forbartha bogearraí a ligeann dúinn méid íosta de chód shitty a ghiniúint. Is fearr gan fadhbanna a chruthú ná iad a shárú go heroically.

Mar sin, glacaim leis an tsaoirse roinnt comhairle a thabhairt maidir le conas scríobh i C++ ar bhealach nach scaoilfidh mé cosa duine ar bith nó nach mbuailfidh mé aon duine sa mhullach le ráca.

Bain an leas is fearr as diagnóisic tiomsaitheora

Úsáideann ár bhfoireann na roghanna tiomsaithe seo a leanas (agus tugann sí comhairle duit):

-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

Cumasaigh iad i do thionscadal agus foghlaim go leor faoi do chód.

Cloí leis an gcaighdeán

Déan iarracht gan úsáid a bhaint as rudaí a bhraitheann ar ardán má tá analógacha caighdeánacha ann, agus mura féidir leat a dhéanamh gan iad, fillte i mbloic speisialta iad le haghaidh macraí (nó rud éigin eile) agus ná lig do chód a thiomsú faoi choinníollacha nach dtacaítear leo.

Cloí le semantics oibríochta caighdeánach

Ní mór suimiú a bheith sa bhreis, ní mór iolrú a bheith iolrú, ní mór glaoch feidhm a bheith mar ghlao feidhm, ní mór cóip a bheith cóip, ní mór é a iompar, ní mór coimeádán a bheith iterable, ní mór cur chun cinn a bheith ag iterator ++ agus díthagairt *. Agus mar sin de agus mar sin de.

Sílim go bhfuil an smaoineamh soiléir. Tá coinbhinsiúin bunaithe ann nach bhfuil ceangailteach, ach a bhfuil súil ag gach úsáideoir agus léitheoir do chód iad a fheiceáil. Ná déan iarracht a bheith níos fearr ná daoine eile, nó bainfidh tú leas as tú féin.

Scríobh cód comhoiriúnach

Ar an gcéad dul síos, is éard atá i gceist agam an leabharlann caighdeánach. Tá sé an-inmhianaithe go bhféadfar comhéadain do ranganna agus feidhmeanna a úsáid le leabharlanna caighdeánacha agus le leabharlanna eile (mar shampla, Treisiú).

Thig leat breathnú ar na comhéadain STL agus Boost. Le heisceachtaí annamh, feicfidh tú eiseamláir fiúntach ann.

Bain an leas is fearr as uirlisí foinse oscailte

Maidir leis an anailís statach céanna, tá ar a laghad dhá uirlis oscailte saor in aisce ar féidir iad a nascadh uair amháin le haon tionscadal le córas tógála CMake.

Is féidir leat tuilleadh a léamh faoi seo i mo fhoilseachán le déanaí.

Afterword

Mar fhocal scoir, ba mhaith liom a aibhsiú nach bhfuil mé ag moladh gan PVS nó aon anailísí statacha eile a úsáid. Ach molaim duit smaoineamh ar conas a tharla sé go bhfaighidh an anailísí statach earráidí suntasacha i do chód i gcónaí.

Níl anseo ach iarmhairt. Caithfimid an chúis a lorg agus deireadh a chur leis.

Foinse: will.com

Add a comment