Independent nga pagrepaso sa PVS-Studio (Linux, C++)

Nakita nako ang usa ka publikasyon nga nakat-unan sa PVS sa pag-analisar sa ilawom sa Linux, ug nakahukom nga sulayan kini sa akong kaugalingon nga mga proyekto. Ug mao kini ang migawas niini.


Mga sulod

  1. ΠŸΠ»ΡŽΡΡ‹
  2. ΠœΠΈΠ½ΡƒΡΡ‹
  3. Mga resulta
  4. Pagkahuman

ΠŸΠ»ΡŽΡΡ‹

Matubag nga suporta

Nangayo kog yawe sa pagsulay ug gipadala nila kini kanako sa samang adlaw.

Medyo klaro nga dokumentasyon

Nahimo namon ang paglansad sa analisador nga wala’y mga problema. Ang tabang alang sa mga mando sa console magamit usab (bisan kung adunay pipila nga mga reklamo dinhi, tan-awa ang seksyon ΠœΠΈΠ½ΡƒΡΡ‹).

Posibilidad sa multi-threaded analysis

Ang analista adunay usa ka "standard" nga kapilian -j, nga nagtugot sa pag-analisar nga himuon nga managsama sa daghang mga buluhaton. Kini makadaginot ug daghang panahon.

Maayo nga visualization

Daghang lainlain nga mga format sa output, gikan sa teksto hangtod sa gamay nga muzzle sa web. Ang web interface kombenyente, mugbo, nga adunay mga pahiwatig sunod sa mga linya sa code ug mga link sa mga paghulagway sa diagnostic.

Sayon nga paghiusa sa asembliya

Ang tanan nga dokumentasyon naa sa ilang website, makaingon lang ako nga kung ang imong proyekto gitukod gamit ang CMake, nan ang tanan yano ra.

Maayo nga mga paghulagway sa diagnostic

Kung makamugna ka og output sa mode fullhtml, unya ang matag mensahe adunay link sa usa ka diagnostic nga paghulagway, nga adunay mga pagpasabut, mga pananglitan sa code ug dugang nga mga link.

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

Ang pagkawalay alamag sa C ++ nga pinulongan sa analista

Ikasubo, ang PVS usahay makahimo og mga sayup sa syntax ug makamugna og mga sayup nga positibo nga mensahe kung ang code hingpit nga husto.

Pananglitan, adunay usa ka function nga mobalik 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));
}

Oo ang yawe nga pulong auto Makapasabot void, mao kana ang alang niini sakyanan. Apan ang PVS naghimo sa mosunod nga mga mensahe:

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.

Hinay kaayo nga site

Oo, sa web interface sunod sa matag mensahe adunay usa ka link sa katugbang nga diagnostic nga paghulagway nga adunay mga pananglitan. Apan kung mag-klik ka sa usa ka link, kinahanglan ka maghulat og dugay, ug usahay mahitabo kini 504 Gateway Time-out.

Pinulongan

Ang tanan nga mga paghulagway naa sa Russian, nga maayo. Apan ang mga link gikan sa taho kanunay nga motultol sa English nga bersyon. Maayo unta nga makabalhin ka sa pinulongan aron makita nimo dayon ang mga diagnostic sa Russian. Wala ko nakit-an ang ingon nga kapilian sa interface.

Dili kombenyente ang pagtrabaho sa lebel sa diagnostic pinaagi sa console

Magsugod kita sa kamatuoran nga ang duha ka mga sugo gigamit (kini pvs-studio-analyzer ΠΈ plog-converter) lain-laing mga format alang sa pagtino sa diagnostics.

Tabang alang sa pvs-studio-analyzer mabasa:

-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

Dugay ko nga naningkamot sa pagpangita kon asa moadto idugang (β€œpagdugang sa mga mithi”) nga mga yawe. Gisulayan nako nga ilista sila nga gibulag sa mga koma:

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

Gisulayan nako nga irehistro ang yawe sa daghang mga higayon:

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

Ug didto ra nako nahibal-an nga kini mga gamay nga maskara! Ug kinahanglan nimo sum up, ug dili idugang mga kahulugan. Pananglitan, aron makakuha og kinatibuk-ang diagnostics, diagnostics alang sa micro-optimizations ug MISRA, kinahanglan nimo nga i-sum up kini (4 + 8 + 32 = 44):

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

Ang paggamit sa mga bitmasks sa mga interface sa gumagamit sa kasagaran dili maayo nga porma. Ang tanan niini mahimong i-summarize sa sulod, ug usa ka hugpong sa mga bandila mahimong itakda alang sa tiggamit.

Dugang pa, adunay usab usa ka utility plog-converter, nga nagpatunghag mabasa sa tawo nga static nga impormasyon sa pagtuki. Naa siyay laing problema.

Tabang alang sa programa plog-converter mga taho:

-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

Ang pipila ka "mga lebel" nagpakita dinhi nga wala didto kaniadto, ug wala usab akoy nakit-an nga bisan unsa bahin kanila sa dokumentasyon.

Sa kinatibuk-an, kini dili klaro. Mao nga gi-set nako ang tanan sa maximum.

Usa ka hugpong sa mga binuang nga pagpanumpa sa Catch

Duha sa tulo ka proyekto nga akong gi-analisa naggamit ug unit testing library Dakpan2. Ug ang liyon nga bahin sa mga mensahe (!!! 90 sa 138 sa usa ug 297 sa 344 sa lain!!!) adunay mosunod nga porma:

Independent nga pagrepaso sa PVS-Studio (Linux, C++)

Wala magtagad sa multithreading

Adunay daghang mga sayup nga positibo bahin sa wala’y pagbag-o nga mga variable o wala’y katapusan nga mga loop, samtang ang pagtrabaho sa kini nga mga variable mahitabo gikan sa lainlaing mga hilo, ug kung dili kini, nan ang mga pagsulay sa yunit dili molihok.

Independent nga pagrepaso sa PVS-Studio (Linux, C++)

Bisan pa, mahimo ba nga tagdon kini sa usa ka static analyzer? wala kabalo.

Mga resulta

Ang PVS wala'y nakit-an nga tinuod nga mga bug sa akong open source nga mga proyekto gilugtas ko ΠΈ Sunod, ingon man usab sa usa ka nagtrabaho nga draft, nga, tungod sa klaro nga mga hinungdan, dili nako mapresentar. Tinuod, angay nga hinumdoman nga ang pipila ka mga kakulangan nakuha na ug gitul-id sa sayo pa nga paggamit Cppcheck ΠΈ scan-build.

Sa kinatibuk-an, ang impresyon gikan sa tanan niini nga mga tig-analisa halos parehas: oo, nakuha nila ang usa ka butang, usahay bisan usa ka butang nga hinungdanon, apan sa kinatibuk-an ang compiler igo na.

Posible (ug ako sa personal gusto nga maghunahuna sa ingon) nga ang among team naggamit sa software development practices nga nagtugot kanamo sa pagmugna og usa ka minimum nga kantidad sa shitty code. Mas maayo nga dili magmugna og mga problema kay sa mabayanihon nga pagbuntog niini.

Busa, akong gikuha ang kagawasan sa paghatag ug pipila ka tambag kon unsaon pagsulat sa C ++ sa paagi nga dili mapusilan ang mga bitiis ni bisan kinsa o maigo ang bisan kinsa sa agtang gamit ang rake.

Himua ang labing kaayo sa mga diagnostic sa compiler

Ang among team naggamit (ug nagtambag kanimo) sa mosunod nga mga opsyon sa pag-compile:

-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

I-enable sila sa imong proyekto ug makat-on og daghan mahitungod sa imong code.

Magpabilin sa standard

Sulayi nga dili mogamit sa mga butang nga nagsalig sa plataporma kung adunay mga sumbanan nga analogue, ug kung dili gyud nimo mahimo kung wala sila, ibutang kini sa mga espesyal nga bloke alang sa mga macro (o uban pa) ug ayaw tugoti nga ang imong code matipon sa dili suportado nga mga kondisyon.

Padayon sa standard nga operasyon semantics

Ang pagdugang kinahanglan nga pagdugang, ang pagpadaghan kinahanglan nga multiplikasyon, ang function nga tawag kinahanglan nga function nga tawag, ang kopya kinahanglan nga kopya, ang pagdala kinahanglan nga dad-on, ang sudlanan kinahanglan nga iterable, ang iterator kinahanglan adunay promosyon ++ ug dereferencing *. Ug uban pa ug uban pa.

Sa akong hunahuna ang ideya klaro. Adunay mga establisado nga mga kombensiyon nga dili nagbugkos, apan ang tanan nga mga tiggamit ug mga magbabasa sa imong code gilauman nga makita. Ayaw pagsulay sa paglimbong sa uban, kay kung dili, imong malimbongan ang imong kaugalingon.

Pagsulat compatible code

Una sa tanan, gipasabot nako ang standard library. Gitinguha kaayo nga ang mga interface sa imong mga klase ug mga gimbuhaton mahimong magamit sa standard ug uban pang mga librarya (pananglitan, Boost).

Mobati nga gawasnon sa pagtan-aw sa STL ug Boost interface. Uban sa talagsaon nga mga eksepsiyon, makakita ka og usa ka takus nga sulondan didto.

Himua ang labing kaayo sa mga himan nga bukas nga gigikanan

Alang sa parehas nga static nga pagtuki, adunay labing menos duha ka bukas nga libre nga mga himan nga mahimong konektado kausa sa bisan unsang proyekto nga adunay sistema sa pagtukod sa CMake.

Mahimo nimong mabasa ang dugang bahin niini sa akong bag-ong publikasyon.

Pagkahuman

Sa katapusan, gusto nakong ipasiugda nga wala ako nagpasiugda nga dili mogamit sa PVS o bisan unsang uban pang mga static analyzers. Apan gidasig ko ikaw nga hunahunaon kung giunsa kini nahitabo nga ang static analyzer kanunay nga nakit-an ang hinungdanon nga mga sayup sa imong code.

Kini usa lamang ka sangputanan. Kinahanglan natong pangitaon ug wagtangon ang hinungdan.

Source: www.habr.com

Idugang sa usa ka comment