Revizyon endepandan PVS-Studio a (Linux, C++)

Mwen te wè yon piblikasyon ke PVS te aprann analize anba Linux, epi mwen deside eseye li sou pwòp pwojè mwen yo. Ak sa a se sa ki soti nan li.


Content

  1. Pou
  2. Kont
  3. Rezilta
  4. Apreword

Pou

Sipò reponn

Mwen te mande yon kle esè epi yo te voye li ban mwen menm jou a.

Ase dokiman klè

Nou te jere lanse analizè a san okenn pwoblèm. Èd pou kòmandman konsole disponib tou (byenke gen kèk plent isit la, gade seksyon Kont).

Posiblite analiz milti-threaded

Analizè a gen yon opsyon "estanda". -j, ki pèmèt analiz yo dwe fèt an paralèl nan plizyè travay. Sa a sove anpil tan.

Bon vizyalizasyon

Anpil fòma pwodiksyon diferan, soti nan tèks nan yon ti mizo entènèt. Koòdone entènèt la pratik, kout, ak sijesyon akote liy nan kòd la ak lyen ki mennen nan deskripsyon dyagnostik.

Fasil entegrasyon nan asanble a

Tout dokiman an se sou sit entènèt yo, mwen ka sèlman di ke si pwojè ou a bati lè l sèvi avèk CMake, Lè sa a, tout bagay se trè senp.

Bon deskripsyon dyagnostik

Si ou jenere pwodiksyon an mòd fullhtml, Lè sa a, chak mesaj gen yon lyen nan yon deskripsyon dyagnostik, ak eksplikasyon, egzanp kòd ak lyen adisyonèl.

Kont

Inyorans langaj C++ pa analizè a

Malerezman, PVS pafwa fè erè sentaks epi jenere fo mesaj pozitif lè kòd la konplètman kòrèk.

Pou egzanp, gen yon fonksyon ki retounen 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));
}

Wi se mo kle auto Ka vle di void, se pou sa li ye oto. Men, PVS te pwodwi mesaj sa yo:

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.

Sit trè dousman

Wi, nan koòdone entènèt la akote chak mesaj gen yon lyen nan deskripsyon dyagnostik ki koresponn lan ak egzanp. Men, lè ou klike sou yon lyen, ou oblije rete tann byen yon tan long, epi pafwa li rive 504 Gateway Time-out.

Lang

Tout deskripsyon yo nan Larisi, ki se gwo. Men, lyen ki soti nan rapò a toujou mennen nan vèsyon an angle. Li ta bon pou kapab chanje lang pou ou ka wè dyagnostik imedyatman nan Larisi. Mwen pa jwenn yon opsyon konsa nan entèfas a.

Li pa konvenyan pou travay ak nivo dyagnostik atravè konsole a

Ann kòmanse ak lefèt ke de kòmandman yo itilize (sa a pvs-studio-analyzer и plog-converter) diferan fòma pou espesifye dyagnostik.

Ede pou pvs-studio-analyzer li:

-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

Mwen te pase yon bon bout tan ap eseye konnen ki kote yo ale ajoute ("ajoute valè yo") kle. Mwen te eseye lis yo separe pa vigil:

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

Mwen te eseye anrejistre kle a plizyè fwa:

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

Epi sèlman lè sa a mwen reyalize ke sa yo te mask ti jan! Epi ou bezwen rezimemen se pa ajoute siyifikasyon. Pou egzanp, pou jwenn dyagnostik jeneral, dyagnostik pou mikwo-optimizasyon ak MISRA, ou bezwen rezime yo (4 + 8 + 32 = 44):

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

Sèvi ak bitmask nan interfaces itilizatè se jeneralman move fòm. Tout bagay sa a ta ka rezime anndan an, epi yo ta ka mete yon seri drapo pou itilizatè a.

Anplis de sa, gen tou yon sèvis piblik plog-converter, ki jenere enfòmasyon analiz estatik moun lizib. Li gen lòt pwoblèm.

Èd pou pwogram nan plog-converter rapò:

-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

Gen kèk "nivo" parèt isit la ki pa t 'la anvan, epi mwen pa t' jwenn anyen sou yo nan dokiman an tou.

An jeneral, li pa klè. Se poutèt sa mwen mete tout bagay nan maksimòm.

Yon pakèt moun sòt sèmante sou Catch

De nan twa pwojè mwen analize yo itilize yon bibliyotèk tès inite Trape2. Epi lyon mesaj yo (!!! 90 sou 138 nan youn ak 297 sou 344 nan lòt la!!!) gen fòm sa a:

Revizyon endepandan PVS-Studio a (Linux, C++)

Pa pran an kont multithreading

Gen anpil fo pozitif sou varyab swadizan ki pa chanje oswa bouk kontinuèl, pandan y ap travay ak varyab sa yo fèt nan fil diferan, epi si sa a pa t konsa, Lè sa a, tès inite yo pa ta travay.

Revizyon endepandan PVS-Studio a (Linux, C++)

Sepandan, yon analizeur estatik ka menm pran sa a an kont? pa konnen.

Rezilta

PVS pa t jwenn okenn ensèk reyèl nan pwojè sous louvri mwen yo Pete и Proxima, osi byen ke nan yon bouyon k ap travay, ki, pou rezon evidan, mwen pa ka prezante. Se vre, li vo kenbe nan tèt ou ke kèk enpèfeksyon yo te deja kenbe ak korije pi bonè lè l sèvi avèk Cppcheck и scan-build.

An jeneral, enpresyon ki soti nan tout analizè sa yo se apeprè menm bagay la: wi, yo trape yon bagay, pafwa menm yon bagay enpòtan, men an jeneral du a ase.

Li posib (e mwen pèsonèlman renmen panse sa) ke ekip nou an itilize pratik devlopman lojisyèl ki pèmèt nou jenere yon kantite minimòm kòd kaka. Li pi bon pou pa kreye pwoblèm pase ewoyik simonte yo.

Se poutèt sa, mwen pran libète pou bay kèk konsèy sou kòman yo ekri nan C++ nan yon fason yo pa tire janm nenpòt moun oswa frape nenpòt moun nan fwon an ak yon rato.

Pwofite pi plis nan dyagnostik konpilatè

Ekip nou an itilize (epi konseye w) opsyon konpilasyon sa yo:

-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

Pèmèt yo nan pwojè ou a epi aprann anpil bagay sou kòd ou a.

Kenbe estanda a

Eseye pa sèvi ak bagay ki depann de platfòm si gen analogue estanda, epi si ou absoliman pa ka fè san yo, vlope yo nan blòk espesyal pou makro (oswa yon lòt bagay) epi tou senpleman pa kite kòd ou a dwe konpile nan kondisyon ki pa sipòte.

Kenbe semantik operasyon estanda

Adisyon dwe adisyon, miltiplikasyon dwe miltiplikasyon, apèl fonksyon dwe apèl fonksyon, kopi dwe kopi, pote dwe pote, veso dwe iterable, iteratè dwe gen pwomosyon. ++ ak dereferans *. Ak sou sa ak sou sa.

Mwen panse lide a klè. Gen konvansyon etabli ki pa obligatwa, men ke tout itilizatè ak lektè kòd ou a espere wè. Pa eseye twonpe lòt moun, sinon ou pral defonse tèt ou.

Ekri kòd konpatib

Premye a tout, mwen vle di bibliyotèk la estanda. Li trè dezirab ke koòdone klas ou yo ak fonksyon yo ka itilize ak bibliyotèk estanda ak lòt (pa egzanp, Boost).

Ezite pran yon gade nan koòdone yo STL ak Boost. Ak kèk eksepsyon ki ra, ou pral wè yon modèl merite la.

Pwofite pi plis nan zouti sous louvri

Pou menm analiz estatik la, gen omwen de zouti gratis ouvè ki ka konekte yon sèl fwa ak nenpòt pwojè ak sistèm CMake bati.

Ou ka li plis sou sa nan dènye piblikasyon mwen an.

Apreword

Finalman, mwen ta renmen mete aksan sou ke mwen pa defann pa sèvi ak PVS oswa nenpòt lòt analizè estatik. Men, mwen ankouraje w reflechi sou ki jan li te rive ke analizè a estatik toujou ap jwenn erè enpòtan nan kòd ou a.

Sa a se jis yon konsekans. Nou bezwen chèche e elimine kòz la.

Sous: www.habr.com

Achte hosting serye pou sit ki gen pwoteksyon DDoS, sèvè VPS VDS 🔥 Achte yon hébergement sit entènèt serye ak pwoteksyon DDoS, sèvè VPS VDS | ProHoster