Bita mai zaman kanta na PVS-Studio (Linux, C++)

Na ga littafin da PVS ta koya don tantancewa a ƙarƙashin Linux, kuma na yanke shawarar gwada ta akan ayyukana. Kuma wannan shi ne abin da ya fito daga ciki.


Abubuwa

  1. Плюсы
  2. Минусы
  3. Sakamakon
  4. Bayanword

Плюсы

Taimakon amsawa

Na nemi maɓallin gwaji kuma sun aiko mini da shi a wannan rana.

Takaddun bayyanannen gaskiya

Mun gudanar da kaddamar da analyzer ba tare da wata matsala ba. Hakanan akwai taimako don umarnin console (ko da yake akwai wasu gunaguni a nan, duba sashe Минусы).

Yiwuwar bincike mai zare da yawa

Mai nazari yana da zaɓi na "misali". -j, ba da damar yin nazari a layi daya a cikin ayyuka da yawa. Wannan yana adana lokaci mai yawa.

Kyakkyawan gani

Yawancin nau'ikan fitarwa daban-daban, daga rubutu zuwa ƙaramin muzzle na gidan yanar gizo. Keɓancewar yanar gizon ya dace, taƙaitacce, tare da alamu kusa da layukan da ke cikin lambar da hanyoyin haɗin kai zuwa kwatancen bincike..

Sauƙi haɗawa cikin taro

Duk takardun suna kan gidan yanar gizon su, zan iya cewa idan an gina aikin ku ta amfani da CMake, to komai yana da sauƙi.

Kyakkyawan kwatancen bincike

Idan kun samar da fitarwa a yanayin fullhtml, to kowane saƙo yana da hanyar haɗi zuwa bayanin bincike, tare da bayani, misalai na lamba da ƙarin hanyoyin haɗin gwiwa.

Минусы

Rashin sanin yaren C++ ta mai nazari

Abin baƙin ciki, PVS wani lokacin yana yin kurakuran haɗin gwiwa kuma yana haifar da saƙon ƙarya lokacin da lambar ta yi daidai.

Misali, akwai aikin da ke dawowa 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));
}

Ee shine mabuɗin kalmar auto Zai iya nufin void, abin da ake nufi da shi ke nan mota. Amma PVS ta samar da saƙonni masu zuwa:

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.

Shafi a hankali sosai

Ee, a cikin mu'amalar yanar gizo kusa da kowane saƙo akwai hanyar haɗi zuwa daidai kwatankwacin bincike tare da misalai. Amma idan ka danna hanyar haɗi, dole ne ka jira dogon lokaci, kuma wani lokacin yana faruwa 504 Ƙofar Ƙofar Lokaci.

Harshe

Duk kwatancen suna cikin Rashanci, wanda yake da kyau. Amma hanyoyin haɗin kai daga rahoton koyaushe suna kaiwa ga fassarar Turanci. Zai yi kyau a sami damar canza yare domin ku iya duba bincike nan da nan cikin Rashanci. Ban sami irin wannan zaɓi a cikin dubawa ba.

Yana da wuya a yi aiki tare da matakan bincike ta hanyar na'ura wasan bidiyo

Bari mu fara da gaskiyar cewa umarnin biyu da aka yi amfani da su (wannan pvs-studio-analyzer и plog-converter) nau'i daban-daban don tantance ganewar asali.

Taimako don pvs-studio-analyzer karanta:

-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

Na dauki tsawon lokaci ina kokarin gano inda zan dosa ƙara ("ƙara ƙimar") maɓallai. Na yi ƙoƙarin jera su da waƙafi:

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

Na yi ƙoƙarin yin rajistar maɓallin sau da yawa:

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

Kuma a lokacin ne na gane cewa waɗannan ƴan abin rufe fuska ne! Kuma kuna bukata taƙaitawa, kuma ba ƙara ma'ana. Alal misali, don samun bincike na gabaɗaya, bincike don inganta ƙananan ƙananan ƙwayoyin cuta da MISRA, kuna buƙatar taƙaita su (4 + 8 + 32 = 44):

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

Amfani da bitmasks a cikin mu'amalar mai amfani gabaɗaya mummunan tsari ne. Ana iya taƙaita duk waɗannan a ciki, kuma ana iya saita saitin tutoci don mai amfani.

Bugu da kari, akwai kuma mai amfani plog-converter, wanda ke haifar da bayanan bincike a tsaye wanda mutum zai iya karantawa. Tana da sauran matsalolin.

Taimako ga shirin plog-converter rahotanni:

-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

Wasu "matakan" sun bayyana a nan waɗanda ba a da, kuma ban sami wani abu game da su a cikin takardun ba.

Gabaɗaya, ba a bayyana ba. Shi ya sa na saita komai zuwa iyakar.

Wani gungu na zagi na wauta akan kama

Biyu daga cikin ayyukan ukun da na tantance suna amfani da ɗakin karatu na gwaji Kama 2. Sannan kaso na zaki na sakonni (!!! 90 cikin 138 a daya da 297 cikin 344 a daya!!!) suna da sigar kamar haka:

Bita mai zaman kanta na PVS-Studio (Linux, C++)

Ba ya la'akari da multithreading

Akwai ƙididdiga masu yawa game da sauye-sauyen da ake zaton ba su canzawa ko madaukai marasa iyaka, yayin da aiki tare da waɗannan masu canji yana faruwa daga zaren daban-daban, kuma idan ba haka ba ne, to, gwajin naúrar ba zai yi aiki ba.

Bita mai zaman kanta na PVS-Studio (Linux, C++)

Duk da haka, ko a tsaye analyzer zai iya yin la'akari da wannan? Ban sani ba.

Sakamakon

PVS ba ta sami wasu kwari na gaske ba a cikin buɗaɗɗen ayyukana fashe и Na gaba, da kuma a cikin daftarin aiki, wanda, saboda dalilai masu ma'ana, ba zan iya gabatar da su ba. Gaskiya ne, yana da kyau a tuna cewa an riga an kama wasu gazawar kuma an gyara su a baya ta amfani da su Cppcheck и scan-build.

Gabaɗaya, ra'ayi daga duk waɗannan masu nazari kusan iri ɗaya ne: a, suna kama wani abu, wani lokacin ma wani abu mai mahimmanci, amma gabaɗaya mai tarawa ya isa.

Yana yiwuwa (kuma ni da kaina ina son yin tunanin haka) ƙungiyarmu ta yi amfani da ayyukan haɓaka software waɗanda ke ba mu damar samar da ƙaramin adadin shitty code. Zai fi kyau kada a haifar da matsala da a yi nasara da jarumtaka.

Don haka, ina ba da ’yancin ba da shawara kan yadda ake rubuta a cikin C++ ta yadda ba za a harbe ƙafar kowa ba ko kuma a bugi kowa a goshi da rake.

Yi amfani da mafi yawan abubuwan gano masu tarawa

Ƙungiyarmu tana amfani da (kuma tana ba ku shawarar) zaɓuɓɓukan haɗawa masu zuwa:

-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

Kunna su a cikin aikin ku kuma koyi abubuwa da yawa game da lambar ku.

Tsaya ga ma'auni

Gwada kada ku yi amfani da abubuwan da suka dogara da dandamali idan akwai daidaitattun analogues, kuma idan ba za ku iya yin ba tare da su ba, kunsa su cikin tubalan na musamman don macros (ko wani abu dabam) kuma kawai kar a haɗa lambar ku a ƙarƙashin sharuɗɗan da ba su da tallafi.

Tsaya ga daidaitaccen ma'anar aiki

Dole ne ƙari ya zama ƙari, ninkawa dole ne ya ninka, kiran aiki dole ne ya zama kiran aiki, kwafi dole ne a yi kwafi, ɗauka dole ne a ɗauka, dole ne a ɗauka, akwati dole ne a iya jujjuyawa, dole ne ya zama mai haɓakawa. ++ da deferencing *. Da sauransu da sauransu.

Ina tsammanin ra'ayin a bayyane yake. Akwai ƙaƙƙarfan ƙa'idodi waɗanda ba su da alaƙa, amma duk masu amfani da masu karanta lambar ku suna tsammanin gani. Kada ka yi ƙoƙarin yaudarar wasu, in ba haka ba za ka iya yaudarar kanka.

Rubuta lambar da ta dace

Da farko, ina nufin daidaitaccen ɗakin karatu. Yana da matuƙar kyawawa cewa ana iya amfani da mu'amalar azuzuwan ku da ayyukanku tare da daidaitattun dakunan karatu (misali, Boost).

Jin kyauta don kallon STL da Boost musaya. Tare da keɓancewa da ba kasafai ba, zaku ga abin koyi mai cancanta a wurin.

Yi amfani da mafi kyawun kayan aikin buɗe tushen

Don bincike iri ɗaya, akwai aƙalla buɗe kayan aikin kyauta guda biyu waɗanda za a iya haɗa su sau ɗaya kawai zuwa kowane aiki tare da tsarin ginin CMake.

Kuna iya karanta ƙarin game da wannan a cikin littafina na kwanan nan.

Bayanword

A ƙarshe, Ina so in jaddada cewa ba ina ba da shawarar kada a yi amfani da PVS ko wasu masu nazari na tsaye ba. Amma ina ƙarfafa ku kuyi tunani game da yadda abin ya faru cewa a tsaye analyzer kullum yana samun manyan kurakurai a cikin lambar ku.

Wannan sakamako ne kawai. Muna bukatar mu nemo kuma mu kawar da dalilin.

source: www.habr.com

Add a comment