Ndemanga yodziyimira payokha ya PVS-Studio (Linux, C ++)

Ndidawona chofalitsa chomwe PVS idaphunzira kusanthula pansi pa Linux, ndipo ndidaganiza zoyesera pama projekiti anga. Ndipo izi ndi zomwe zidatulukamo.


Zamkatimu

  1. ΠŸΠ»ΡŽΡΡ‹
  2. ΠœΠΈΠ½ΡƒΡΡ‹
  3. Zotsatira
  4. Pambuyo pake

ΠŸΠ»ΡŽΡΡ‹

Thandizo lomvera

Ndinapempha kiyi yoyesera ndipo ananditumizira tsiku lomwelo.

Zolemba zomveka bwino

Tinakwanitsa kukhazikitsa analyzer popanda vuto lililonse. Thandizo la malamulo a console likupezekanso (ngakhale pali zodandaula pano, onani gawo ΠœΠΈΠ½ΡƒΡΡ‹).

Kuthekera kwa kusanthula kwamitundu yambiri

The analyzer ali ndi "standard" njira -j, kulola kuti kusanthula kuchitidwe mofanana mu ntchito zingapo. Izi zimapulumutsa nthawi yambiri.

Kuwoneka bwino

Mitundu yambiri yosiyanasiyana yotulutsa, kuchokera pamawu mpaka pamilomo yaying'ono. Mawonekedwe a intaneti ndiwosavuta, achidule, okhala ndi malingaliro pafupi ndi mizere mu code ndi maulalo ofotokozera za matenda..

Kusakanikirana kosavuta mu msonkhano

Zolemba zonse zili patsamba lawo, ndinganene kuti ngati polojekiti yanu ikumangidwa pogwiritsa ntchito CMake, ndiye kuti zonse ndi zophweka.

Mafotokozedwe abwino a matenda

Ngati mupanga linanena bungwe mu mode fullhtml, ndiye kuti uthenga uliwonse uli ndi chiyanjano cha kufotokozera kwa matenda, ndi mafotokozedwe, zitsanzo zamakhodi ndi maulalo owonjezera.

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

Kusadziwa chilankhulo cha C ++ ndi analyzer

Tsoka ilo, PVS nthawi zina imapanga zolakwika za syntax ndikupanga mauthenga abodza pomwe codeyo ili yolondola.

Mwachitsanzo, pali ntchito yomwe imabwerera 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));
}

Inde ndi mawu ofunika auto Angatanthauze void, ndichifukwa chake galimoto. Koma PVS idatulutsa mauthenga awa:

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.

Tsamba lochedwa kwambiri

Inde, mu mawonekedwe a intaneti pafupi ndi uthenga uliwonse pali ulalo wa kufotokozera kofananira ndi zitsanzo. Koma mukadina ulalo, muyenera kudikirira nthawi yayitali, ndipo nthawi zina zimachitika 504 Gateway Nthawi Yatha.

Chilankhulo

Mafotokozedwe onse ali mu Chirasha, chomwe chiri chabwino. Koma maulalo a lipotilo amatsogolera ku mtundu wa Chingerezi. Zingakhale zabwino kusintha chinenerocho kuti muwone matenda nthawi yomweyo mu Chirasha. Sindinapeze njira yotereyi mu mawonekedwe.

Ndikovuta kugwira ntchito ndi magawo ozindikira matenda kudzera pa console

Tiyeni tiyambe ndi mfundo yakuti malamulo awiriwa amagwiritsidwa ntchito (izi pvs-studio-analyzer ΠΈ plog-converter) mitundu yosiyanasiyana yofotokozera matenda.

Thandizo kwa pvs-studio-analyzer amawerenga:

-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

Ndinakhala nthawi yayitali ndikufufuza komwe ndingapite onjezani ("adding the values") makiyi. Ndidayesa kuzilemba zolekanitsidwa ndi ma comma:

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

Ndinayesa kulembetsa makiyi kangapo:

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

Ndipo ndipamene ndinazindikira kuti awa anali masks pang'ono! Ndipo muyenera mwachidule, osati onjezani matanthauzo. Mwachitsanzo, kuti mudziwe zambiri, zowunikira ma micro-optimizations ndi MISRA, muyenera kuziphatikiza (4 + 8 + 32 = 44):

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

Kugwiritsa ntchito ma bitmasks pamawonekedwe a ogwiritsa ntchito nthawi zambiri kumakhala koyipa. Zonsezi zikhoza kufotokozedwa mwachidule mkati, ndipo mndandanda wa mbendera ukhoza kukhazikitsidwa kwa wogwiritsa ntchito.

Komanso, palinso zothandiza plog-converter, yomwe imapanga chidziwitso chowerengera cha anthu. Ali ndi mavuto ena.

Thandizo pa pulogalamu plog-converter malipoti:

-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

"Magawo" ena adawonekera pano omwe sanalipo kale, ndipo sindinapeze chilichonse chokhudza iwo m'zolembedwa.

Mwambiri, sizodziwika. Ndicho chifukwa chake ndinayika zonse pamlingo waukulu.

Gulu la opusa akutukwana pa Gwirani

Awiri mwa ma projekiti atatu omwe ndidasanthula amagwiritsa ntchito laibulale yoyesera mayunitsi Kugwira2. Ndipo gawo la mkango la mauthenga (!!! 90 mwa 138 mwa umodzi ndi 297 mwa 344 mwa winayo !!!) ali ndi mawonekedwe awa:

Ndemanga yodziyimira payokha ya PVS-Studio (Linux, C ++)

Osatengera multithreading

Pali zabwino zambiri zabodza zokhudzana ndi zosintha zosasinthika kapena malupu osatha, pomwe kugwira ntchito ndi zosinthazi kumachitika kuchokera ku ulusi wosiyanasiyana, ndipo ngati sizinali choncho, ndiye kuti kuyesa kwamayunitsi sikungagwire ntchito.

Ndemanga yodziyimira payokha ya PVS-Studio (Linux, C ++)

Komabe, kodi static analyzer angaganizire izi? Sindikudziwa.

Zotsatira

PVS sinapeze nsikidzi zenizeni pamapulojekiti anga otseguka zimaphulika ΠΈ Ovomereza, komanso muzolemba zogwirira ntchito, zomwe, pazifukwa zomveka, sindingathe kuzipereka. Zowona, ndikofunikira kukumbukira kuti zolakwika zina zidagwidwa kale ndikukonzedwa kale pogwiritsa ntchito Cppcheck ΠΈ scan-build.

Kawirikawiri, malingaliro ochokera kwa osanthula onsewa ndi ofanana: inde, amapeza chinachake, nthawi zina ngakhale chinthu chofunika, koma wophatikiza ndi wokwanira.

N'zotheka (ndipo ine ndekha ndimakonda kuganiza choncho) kuti gulu lathu limagwiritsa ntchito machitidwe opangira mapulogalamu omwe amatilola kuti tipange chiwerengero chochepa cha shitty code. Ndi bwino kuti musabweretse mavuto kusiyana ndi kuwagonjetsa mwaulemu.

Chifukwa chake, ndimakhala ndi ufulu wopereka upangiri wamomwe mungalembe mu C ++ kuti musawombere miyendo ya aliyense kapena kumenya aliyense pamphumi.

Gwiritsani ntchito bwino pakuwunika kophatikiza

Gulu lathu limagwiritsa ntchito (ndikukulangizani kuti) zotsatirazi zophatikiza:

-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

Athandizeni pulojekiti yanu ndikuphunzira zambiri za code yanu.

Gwiritsitsani ku muyezo

Yesetsani kuti musagwiritse ntchito zinthu zomwe zimadalira papulatifomu ngati pali ma analogi okhazikika, ndipo ngati simungathe kuchita popanda iwo, kulungani m'miyala yapadera ya macros (kapena china chake) ndipo musalole kuti code yanu isapangidwe popanda kuthandizidwa.

Gwiritsani ntchito semantics yokhazikika

Kuwonjezera kuyenera kukhala kuwonjezera, kuchulukitsa kuyenera kukhala kuchulutsa, kuyimba ntchito kuyenera kukhala kuyitanira, kukopera kuyenera kutsatiridwa, kunyamulidwa, chidebe chiyenera kukhala chotheka, chothandizira chiyenera kukwezedwa. ++ ndi kusokoneza *. Ndi zina zotero.

Ndikuganiza kuti lingalirolo ndi lomveka. Pali mikangano yokhazikitsidwa yomwe siyimangirira, koma kuti ogwiritsa ntchito onse ndi owerenga ma code anu akuyembekeza kuwona. Osayesa kuchita mopambanitsa ena, apo ayi mungadzipambanitse.

Lembani code yogwirizana

Choyamba, ndikutanthauza laibulale yokhazikika. Ndizofunikira kwambiri kuti zolumikizirana zamakalasi anu ndi ntchito zigwiritsidwe ntchito ndi malaibulale okhazikika ndi ena (mwachitsanzo, Boost).

Khalani omasuka kuyang'ana mawonekedwe a STL ndi Boost. Kupatulapo kawirikawiri, mudzawona chitsanzo choyenera pamenepo.

Gwiritsani ntchito bwino zida zotsegula

Pakuwunika kofananako, pali zida ziwiri zotseguka zaulere zomwe zitha kulumikizidwa kamodzi ku polojekiti iliyonse ndi CMake build system.

Mutha kuwerenga zambiri za izi m'buku langa laposachedwa.

Pambuyo pake

Pomaliza, ndikufuna kutsindika kuti sindikulimbikitsa kuti ndisagwiritse ntchito PVS kapena ma analyzer ena aliwonse. Koma ndikukulimbikitsani kuti muganizire momwe zidachitikira kuti static analyzer nthawi zonse imapeza zolakwika zazikulu mu code yanu.

Izi ndi zotsatira chabe. Tiyenera kuyang'ana ndi kuthetsa chifukwa chake.

Source: www.habr.com

Kuwonjezera ndemanga