Lèirmheas neo-eisimeileach air PVS-Studio (Linux, C ++)

Chunnaic mi foillseachadh a bha PVS air ionnsachadh a sgrùdadh fo Linux, agus chuir mi romhpa feuchainn air air na pròiseactan agam fhìn. Agus is e seo a thàinig a-mach às.


Clàr-innse

  1. Плюсы
  2. Минусы
  3. Builean
  4. Post-d gu caraid

Плюсы

Taic fhreagarrach

Dh’ iarr mi iuchair deuchainn agus chuir iad thugam an aon latha e.

Sgrìobhainnean gu math soilleir

Chaidh againn air an anailisiche a chuir air bhog gun duilgheadas sam bith. Tha cuideachadh airson òrdughan tòcan ri fhaighinn cuideachd (ged a tha cuid de ghearanan an seo, faic an earrann Минусы).

Comasach air mion-sgrùdadh ioma-snàthainn

Tha roghainn "àbhaisteach" aig an anailisiche -j, a 'ceadachadh mion-sgrùdadh a dhèanamh ann an co-shìnte ann an grunn ghnìomhan. Sàbhalaidh seo tòrr ùine.

Deagh shealladh

Mòran chruthan toraidh eadar-dhealaichte, bho theacsa gu muzzle beag lìn. Tha an eadar-aghaidh lìn goireasach, pongail, le sanasan ri taobh loidhnichean sa chòd agus ceanglaichean gu tuairisgeulan sgrùdaidh.

Amalachadh furasta a-steach don cho-chruinneachadh

Tha na sgrìobhainnean gu lèir air an làrach-lìn aca, chan urrainn dhomh ach a ràdh ma thèid do phròiseact a thogail a’ cleachdadh CMake, tha a h-uile dad gu math sìmplidh.

Tuairisgeul math diagnosachd

Ma ghineas tu toradh sa mhodh fullhtml, an uairsin tha ceangal aig gach teachdaireachd gu tuairisgeul breithneachaidh, le mìneachaidhean, eisimpleirean còd agus ceanglaichean a bharrachd.

Минусы

Aineolas mun chànan C ++ leis an anailisiche

Gu mì-fhortanach, bidh PVS uaireannan a 'dèanamh mhearachdan co-chòrdadh agus a' cruthachadh teachdaireachdan meallta dearbhach nuair a tha an còd gu tur ceart.

Mar eisimpleir, tha gnìomh ann a thig air ais 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));
}

'S e am prìomh fhacal auto Faodaidh a bhith a ’ciallachadh void, is ann air sgàth sin a tha e càr. Ach thug PVS a-mach na teachdaireachdan 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.

Làrach gu math slaodach

Tha, anns an eadar-aghaidh lìn ri taobh gach teachdaireachd tha ceangal ris an tuairisgeul breithneachaidh co-fhreagarrach le eisimpleirean. Ach nuair a phutas tu air ceangal, feumaidh tu feitheamh ùine mhòr, agus uaireannan bidh e a’ tachairt 504 Ùine Gateway.

Cànan

Tha a h-uile tuairisgeul ann an Ruisis, a tha fìor mhath. Ach bidh ceanglaichean bhon aithisg an-còmhnaidh a’ leantainn chun dreach Beurla. Bhiodh e math a bhith comasach air an cànan atharrachadh gus am faic thu diagnosachd sa bhad ann an Ruisis. Cha do lorg mi a leithid de roghainn san eadar-aghaidh.

Tha e mì-ghoireasach obrachadh le ìrean breithneachaidh tron ​​​​chonsól

Feuch an tòisich sinn leis an fhìrinn gun deach an dà àithne a chleachdadh (seo pvs-studio-analyzer и plog-converter) diofar chruthan airson diagnosachd a shònrachadh.

Cuideachadh airson pvs-studio-analyzer a ’leughadh:

-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

Chuir mi seachad ùine mhòr a’ feuchainn ri faighinn a-mach càite an tèid mi cuir ris (“cur ris na luachan”) iuchraichean. Dh'fheuch mi ri an liostadh air an sgaradh le cromagan:

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

Dh'fheuch mi ris an iuchair a chlàradh grunn thursan:

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

Agus is ann dìreach an uairsin a thuig mi gur e masgaichean beaga a bh’ annta! Agus feumaidh tu suim suasach chan eil cuir ris brìgh. Mar eisimpleir, gus breithneachadh coitcheann fhaighinn, diagnosachd airson meanbh-optimizations agus MISRA, feumaidh tu an geàrr-chunntas (4 + 8 + 32 = 44):

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

Tha cleachdadh bitmasks ann an eadar-aghaidh luchd-cleachdaidh mar as trice ann an droch chruth. Dh’ fhaodadh seo uile a bhith air a gheàrr-chunntas air an taobh a-staigh, agus dh’ fhaodadh seata de bhrataichean a shuidheachadh airson an neach-cleachdaidh.

A bharrachd air an sin, tha goireas ann cuideachd plog-converter, a bhios a’ gineadh fiosrachadh anailis statach a ghabhas leughadh le daoine. Tha trioblaidean eile aice.

Cuideachadh airson a ' phrògram plog-converter aithisgean:

-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

Nochd cuid de “ìrean” an seo nach robh ann roimhe, agus cha do lorg mi dad mun deidhinn anns na sgrìobhainnean nas motha.

San fharsaingeachd, chan eil e soilleir. Sin as coireach gun do shuidhich mi a h-uile càil chun na h-ìre as àirde.

Bun de mhionnaidhean gòrach air Catch

Bidh dhà de na trì pròiseactan a rinn mi mion-sgrùdadh a’ cleachdadh leabharlann deuchainn aonad Catch2. Agus tha an cruth a leanas aig cuibhreann an leòmhann de theachdaireachdan (!!! 90 a-mach à 138 ann an aon agus 297 a-mach à 344 anns an fhear eile!!!):

Lèirmheas neo-eisimeileach air PVS-Studio (Linux, C ++)

Chan eil e a’ toirt aire do ioma-snàithlean

Tha mòran de rudan meallta ann mu chaochladairean gun atharrachadh no lùban gun chrìoch, fhad ‘s a tha obair leis na caochladairean sin a’ tachairt bho dhiofar snàithleanan, agus mura biodh seo mar sin, cha bhiodh deuchainnean aonaid ag obair.

Lèirmheas neo-eisimeileach air PVS-Studio (Linux, C ++)

Ach, an urrainn do anailisiche statach eadhon aire a thoirt dha seo? Chan eil fios agam.

Builean

Cha do lorg PVS fìor bhiteagan anns na pròiseactan stòr fosgailte agam Burst и An ath rud, a bharrachd air ann an dreach obrach, nach urrainn dhomh, airson adhbharan follaiseach, a thaisbeanadh. Fìor, is fhiach a bhith mothachail gu bheil cuid de uireasbhaidhean air an glacadh agus air an ceartachadh na bu thràithe a ’cleachdadh Cppcheck и scan-build.

San fharsaingeachd, tha beachd nan sgrùdairean sin uile timcheall air an aon rud: tha, bidh iad a ’glacadh rudeigin, uaireannan eadhon rudeigin cudromach, ach san fharsaingeachd tha an compiler gu leòr.

Tha e comasach (agus is toil leam gu pearsanta a bhith a’ smaoineachadh sin) gu bheil an sgioba againn a’ cleachdadh cleachdaidhean leasachadh bathar-bog a leigeas leinn ìre as lugha de chòd shitty a ghineadh. Tha e nas fheàrr gun a bhith a 'cruthachadh dhuilgheadasan na bhith a' faighinn thairis orra gu gaisgeil.

Mar sin, tha mi a’ gabhail na saorsa beagan comhairle a thoirt seachad air mar a sgrìobhas mi ann an C ++ ann an dòigh gus nach cuir mi casan duine dheth no bualadh air duine sam bith san aghaidh le ràcan.

Dèan an fheum as fheàrr de diagnosachd compiler

Bidh an sgioba againn a’ cleachdadh (agus a’ toirt comhairle dhut) na roghainnean cruinneachaidh a leanas:

-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

Dèan comas dhaibh sa phròiseact agad agus ionnsaich tòrr mun chòd agad.

Cùm ris an inbhe

Feuch gun a bhith a 'cleachdadh rudan a tha an urra ris an àrd-ùrlar ma tha analogues àbhaisteach ann, agus mura h-urrainn dhut a dhèanamh às an aonais, paisg iad ann am blocaichean sònraichte airson macros (no rudeigin eile) agus dìreach na leig leis a' chòd agad a bhith air a chur ri chèile fo chumhachan gun taic.

Gabh ri semantics obrachaidh àbhaisteach

Feumaidh cur-ris a bhith ann, feumaidh iomadachadh a bhith air iomadachadh, feumaidh gairm gnìomh a bhith na ghairm gnìomh, feumaidh leth-bhreac a bhith air a chopaigeadh, feumaidh an giùlan a bhith air a ghiùlan, feumaidh an soitheach a bhith air ath-aithris, feumaidh àrdachadh a bhith aig iterator ++ agus ath-iomradh *. Agus mar sin air adhart agus mar sin air adhart.

Tha mi a’ smaoineachadh gu bheil am beachd soilleir. Tha gnàthasan stèidhichte ann nach eil ceangaltach, ach a tha luchd-cleachdaidh agus luchd-leughaidh a’ chòd agad an dùil fhaicinn. Na feuch ri bhith a’ cur às do dhaoine eile, air neo bidh thu a’ dol thairis ort fhèin.

Sgrìobh còd co-fhreagarrach

An toiseach, tha mi a 'ciallachadh an leabharlann àbhaisteach. Tha e air leth ion-mhiannaichte gum faodar eadar-aghaidh do chlasaichean agus gnìomhan a chleachdadh le leabharlannan àbhaisteach agus eile (mar eisimpleir, Boost).

Faodaidh tu sùil a thoirt air an eadar-aghaidh STL agus Boost. Le eisgeachdan tearc, chì thu modal dreuchd airidh an sin.

Dèan an fheum as fheàrr de innealan stòr fosgailte

Airson an aon sgrùdadh statach, tha co-dhiù dà inneal fosgailte an-asgaidh a dh’ fhaodar a cheangal dìreach aon uair ri pròiseact sam bith le siostam togail CMake.

Faodaidh tu barrachd a leughadh mu dheidhinn seo anns an fhoillseachadh agam o chionn ghoirid.

Post-d gu caraid

Mu dheireadh, bu mhath leam cuideam a chuir air nach eil mi a ’tagradh gun a bhith a’ cleachdadh PVS no sgrùdairean statach sam bith eile. Ach tha mi gad bhrosnachadh gus smaoineachadh air mar a thachair gu bheil an anailisiche statach an-còmhnaidh a’ lorg mhearachdan mòra sa chòd agad.

Chan eil an seo ach mar thoradh. Feumaidh sinn an adhbhar a lorg agus a chuir às.

Source: www.habr.com

Cuir beachd ann