Famerenana tsy miankina amin'ny PVS-Studio (Linux, C++)

Nahita boky iray izay nianaran'ny PVS nanadihady tamin'ny Linux aho, ary nanapa-kevitra ny hanandrana izany amin'ny tetikasako manokana. Ary izany no nivoaka tamin'izany.


afa-po

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

ΠŸΠ»ΡŽΡΡ‹

Fanohanana mamaly

Nangataka fanalahidin'ny fitsarana aho ary nalefany tamiko io andro io ihany.

Antontan-taratasy mazava tsara

Nahavita namoaka ilay mpandinika tsy nisy olana izahay. Misy ihany koa ny fanampiana ho an'ny baiko console (na dia misy fitarainana aza eto, jereo ny fizarana ΠœΠΈΠ½ΡƒΡΡ‹).

Ny mety hisian'ny famakafakana multi-threaded

Ny analyse dia manana safidy "manara-penitra". -j, mamela ny famakafakana atao mifanitsy amin'ny asa maro. Mamonjy fotoana betsaka izany.

Fijery tsara

Fomba famoahana maro samihafa, manomboka amin'ny lahatsoratra ka hatramin'ny vavahadin-tranonkala kely. Ny interface interface dia mora, fohy, miaraka amin'ny soso-kevitra eo akaikin'ny andalana ao amin'ny kaody ary rohy mankany amin'ny famaritana diagnostika.

Fampidirana mora amin'ny fivoriambe

Ny antontan-taratasy rehetra dia ao amin'ny tranokalany, afaka milaza aho fa raha mampiasa CMake ny tetikasanao dia tsotra be ny zava-drehetra.

Famaritana diagnostika tsara

Raha mamokatra vokatra amin'ny mode ianao fullhtml, dia manana rohy mankany amin'ny famaritana diagnostika ny hafatra tsirairay, miaraka amin'ny fanazavana, ohatra kaody ary rohy fanampiny.

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

Ny tsy fahalalana ny fiteny C++ nataon'ny mpanadihady

Indrisy anefa fa manao hadisoana syntax indraindray ny PVS ary miteraka hafatra tsara diso rehefa marina tanteraka ny code.

Ohatra, misy fiasa izay miverina 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));
}

Eny no teny fototra auto Mety midika void, izany no ilaina fiara. Saingy namoaka ireto hafatra manaraka ireto ny PVS:

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.

Site tena miadana

Eny, ao amin'ny interface Internet eo akaikin'ny hafatra tsirairay dia misy rohy mankany amin'ny famaritana diagnostika mifanaraka amin'izany miaraka amin'ny ohatra. Saingy rehefa manindry rohy ianao dia tsy maintsy miandry ela be, ary indraindray dia mitranga izany Famaranana amin'ny vavahady 504.

fiteny

Ny famaritana rehetra dia amin'ny teny Rosiana, izay tena tsara. Saingy ny rohy avy amin'ny tatitra dia mitarika hatrany amin'ny dikan-teny anglisy. Tsara raha afaka manova ny fiteny mba hahafahanao mijery ny diagnostika avy hatrany amin'ny teny Rosiana. Tsy nahita safidy toy izany aho tao amin'ny interface.

Tsy mety ny miasa amin'ny ambaratonga diagnostika amin'ny alΓ lan'ny console

Andeha isika hanomboka amin'ny hoe nampiasa ny baiko roa (ity pvs-studio-analyzer ΠΈ plog-converter) endrika samihafa hamaritana ny diagnostika.

Fanampiana ho an'ny pvs-studio-analyzer mivaky hoe:

-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

Nandany fotoana ela aho nieritreritra hoe aiza no haleha hametraka ("manampy ny soatoavina") fanalahidy. Niezaka nitanisa azy ireo aho sarahin'ny faingo:

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

Imbetsaka aho no nanandrana nisoratra anarana ny lakile:

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

Ary avy eo vao tsapako fa saron-tava kely ireo! Ary mila ianao mamintina, fa tsy hametraka dikany. Ohatra, mba hahazoana diagnostics ankapobeny, diagnostics for micro-optimizations ary MISRA dia mila mamintina azy ireo ianao (4 + 8 + 32 = 44):

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

Ny fampiasana bitmasks amin'ny mpampiasa interface dia endrika ratsy amin'ny ankapobeny. Izany rehetra izany dia azo fintinina ao anatiny, ary misy saina maromaro azo apetraka ho an'ny mpampiasa.

Ankoatra izany, misy ihany koa ny utility plog-converter, izay miteraka fampahalalana momba ny fanadihadiana static azo vakin'ny olombelona. Manana olana hafa izy.

Fanampiana ho an'ny programa plog-converter tatitra:

-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

Nipoitra teto ny "ambaratonga" sasany izay tsy teo aloha, ary tsy nahita na inona na inona momba azy ireo aho tao amin'ny antontan-taratasy.

Amin'ny ankapobeny dia tsy mazava izany. Izay no nahatonga ahy nametraka ny zava-drehetra ho ambony indrindra.

Vondrona adala miteny ratsy momba ny Catch

Ny roa amin'ireo tetikasa telo nodinihiko dia mampiasa tranomboky fitiliana unit Sambory2. Ary ny anjaran'ny liona amin'ny hafatra (!!! 90 amin'ny 138 amin'ny iray ary 297 amin'ny 344 amin'ny iray hafa!!!) dia manana endrika manaraka:

Famerenana tsy miankina amin'ny PVS-Studio (Linux, C++)

Tsy miraharaha ny multithreading

Betsaka ny fiheverana diso momba ny fari-piadidiana lazaina fa tsy miova na tadivavarana tsy misy fiafarana, raha toa ka avy amin'ny kofehy samihafa ny asa miaraka amin'ireo fari-pitsipika ireo, ary raha tsy izany dia tsy mandeha ny fitsapana unit.

Famerenana tsy miankina amin'ny PVS-Studio (Linux, C++)

Na izany aza, afaka mandray an'izany ve ny mpandinika static? tsy mahalala.

vokatra

Tsy nahita bibikely tena izy ny PVS tao amin'ny tetikasa open source vaky ΠΈ Manaraka, ary koa amin'ny drafitra miasa, izay, noho ny antony mazava, dia tsy afaka manolotra. Marina fa ilaina ny mitadidy fa ny lesoka sasany dia efa tratra sy nahitsy teo aloha Cppcheck ΠΈ scan-build.

Amin'ny ankapobeny, ny fahatsapana avy amin'ireo mpandinika rehetra ireo dia mitovy ihany: eny, mahazo zavatra izy ireo, indraindray zava-dehibe aza, fa amin'ny ankapobeny dia ampy ny compiler.

Azo atao (ary tiako ny mieritreritra izany) fa ny ekipanay dia mampiasa fomba fanao amin'ny fampivoarana rindrambaiko izay ahafahantsika mamorona fehezan-dalΓ na faran'izay kely indrindra. Aleo tsy mamorona olana toy izay mandresy amin'ny fomba mahery fo.

Noho izany, maka fahalalahana aho hanome torohevitra momba ny fomba hanoratana amin'ny C ++ amin'ny fomba tsy hitifitra ny tongotry ny olona na hamely olona amin'ny handriny amin'ny rake.

Araraoty ny diagnostic compiler

Ny ekipanay dia mampiasa (ary manoro anao) ireto safidy fanangonana manaraka ireto:

-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

Ampidiro ao amin'ny tetikasanao izy ireo ary mianara betsaka momba ny kaody anao.

Mifikitra amin'ny fenitra

Andramo ny tsy mampiasa zavatra miankina amin'ny sehatra raha misy analogue mahazatra, ary raha tsy afaka manao izany ianao raha tsy misy azy ireo dia aforeto amin'ny sakana manokana ho an'ny macros (na zavatra hafa) ary aza avela fotsiny ny kaody natambatra ao anatin'ny fepetra tsy misy fanohanana.

Mifikitra amin'ny semantika mahazatra

Ny fanampim-panampiana dia tsy maintsy ampitomboina, ny fampitomboana dia tsy maintsy ampitomboina, ny antso an-tariby dia tsy maintsy atao antso an-tariby, ny kopia dia tsy maintsy misy kopia, ny mitondra dia tsy maintsy entina, ny kaontenera dia tsy maintsy iterable, ny mpizara dia tsy maintsy misy promotion ++ ary dereferencing *. Ary ny sisa sy ny sisa.

Heveriko fa mazava ny hevitra. Misy ny fifanarahana napetraka izay tsy mifamatotra, fa ny mpampiasa sy ny mpamaky ny kaody rehetra manantena ny hahita azy. Aza manandrana mamitaka ny hafa, fa raha tsy izany dia ho resinao ny tenanao.

Manorata kaody mifanentana

Voalohany indrindra dia ny tranomboky mahazatra no tiako holazaina. Tena irina tokoa fa azo ampiasaina amin'ny tranomboky manara-penitra sy hafa (ohatra, Boost) ny fifandraisan'ny kilasinao sy ny fiasanao.

Aza misalasala mijery ny interface STL sy Boost. Amin'ny tranga tsy fahita firy dia hahita modely mendrika ianao any.

Araraoty ny fitaovana open source

Ho an'ny famakafakana static mitovy, dia misy fitaovana malalaka misokatra roa farafahakeliny izay azo ampifandraisina indray mandeha amin'ny tetikasa rehetra miaraka amin'ny rafitra fananganana CMake.

Afaka mamaky bebe kokoa momba izany ianao ao amin'ny fanontanako vao haingana.

afterword

Farany, tiako ny manantitrantitra fa tsy misolovava ny tsy hampiasa PVS na mpandinika static hafa aho. Fa mamporisika anao aho hieritreritra ny fomba nitrangan'ny mpandinika static tsy mitsahatra mahita lesoka lehibe ao amin'ny codeo.

Vokany ihany izany. Mila mitady sy manafoana ny antony.

Source: www.habr.com

Add a comment