Nirxandina serbixwe ya PVS-Studio (Linux, C++)

Min weşanek dît ku PVS fêrî analîzkirina Linux-ê bû, û biryar da ku wê li ser projeyên xwe biceribînim. Û ev e ya ku ji wê derket.


Contains

  1. Плюсы
  2. Минусы
  3. Encam
  4. Paşê

Плюсы

Piştgiriya bersivdar

Min mifteya ceribandinê xwest û wan jî heman rojê ji min re şandin.

Belgeyên pir zelal

Me karî ku analîzker bêyî pirsgirêk dest pê bike. Alîkarî ji bo emrên konsolê jî heye (her çend li vir hin gilî hene, li beşê binêre Минусы).

Ihtîmala analîza pir-mijarî

Analîzator vebijarkek "standard" heye -j, dihêle ku analîz di çend karan de paralel were kirin. Ev gelek dem xilas dike.

Visualîzasyonek baş

Gelek formên derketinê yên cihêreng, ji ​​nivîsê bigire heya mûçikek piçûk. Têkiliya malperê rehet e, kurt, bi îşaretên li kêleka rêzikên di kodê de û lînkên danasînên tespîtkirinê.

Yekbûna hêsan di civînê de

Hemî belge li ser malpera wan e, ez tenê dikarim bibêjim ku heke projeya we bi karanîna CMake ve hatî çêkirin, wê hingê her tişt pir hêsan e.

Danasînên tespîtkirina baş

Heke hûn di modê de hilberan çêbikin fullhtml, wê hingê her peyamek bi ravekirinek, nimûneyên kodê û girêdanên din ve girêdanek ravekek tespîtkirinê heye.

Минусы

Nezanîna zimanê C++ ji aliyê analîstê ve

Mixabin, PVS carinan xeletiyên hevoksaziyê dike û dema ku kod bi tevahî rast e peyamên erênî yên derewîn çêdike.

Mînakî, fonksiyonek heye ku vedigere 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));
}

Erê peyva sereke ye auto Can wateya void, ji bo vê yekê ye auto. Lê PVS peyamên jêrîn hilberandin:

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.

Malpera pir hêdî

Erê, di navgîniya webê de li tenişta her peyamê girêdanek bi danasîna tespîtkirina têkildar bi mînakan re heye. Lê gava ku hûn li ser zencîreyekê bikirtînin, divê hûn demek pir dirêj li bendê bin, û carinan jî çêdibe 504 Gateway Time-out.

Ziman

Hemî danasîn bi rûsî ne, ku pir xweş e. Lê lînkên ji raporê her gav ber bi guhertoya îngilîzî ve diçin. Dê xweş be ku meriv bikaribe ziman biguhezîne da ku hûn tavilê teşhîs bi rûsî bibînin. Min di navberê de vebijarkek wusa nedît.

Nerehet e ku meriv bi astên tespîtkirinê re bi konsolê re bixebite

Werin em bi vê rastiyê dest pê bikin ku du ferman têne bikar anîn (ev pvs-studio-analyzer и plog-converter) Formatên cihêreng ên ji bo diyarkirina tespîtan.

Alîkarî ji bo pvs-studio-analyzer dixwîne:

-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

Min demek dirêj hewl da ku ez biçim ku derê lêzêdekirin ("zêdekirina nirxan") bişkokên. Min hewl da ku navnîşa wan bi kommasan veqetînim:

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

Min çend caran hewl da ku mifteyê tomar bikim:

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

Û tenê wê gavê min fêhm kir ku ev maskeyên pitik bûn! Û hûn hewce ne Kom kirinû ne lêzêdekirin wateyên. Mînakî, ji bo ku hûn tespîtên gelemperî, tespîtkirina ji bo mîkro-optimîzasyonan û MISRA bistînin, hûn hewce ne ku wan kurt bikin (4 + 8 + 32 = 44):

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

Bikaranîna bitmasks di navgînên bikarhêner de bi gelemperî rengek xirab e. Hemî ev dikare di hundurê de were kurt kirin, û komek ala dikare ji bo bikarhêner were danîn.

Digel vê yekê, karûbarek jî heye plog-converter, ku agahdariya analîzên statîk ên ku ji hêla mirovan ve têne xwendin diafirîne. Pirsgirêkên wê yên din hene.

Alîkariya bernameyê plog-converter rapor dike:

-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

Hin "asta" li vir xuya bûn ku berê ne li wir bûn, û min di belgeyê de jî tiştek li ser wan nedît.

Bi gelemperî, ne diyar e. Ji ber vê yekê min her tişt li ser herî zêde datîne.

Komek sondxwarinên ehmeqî li ser Catch

Du ji sê projeyên ku min analîz kirin pirtûkxaneyek ceribandina yekîneyê bikar tînin girtin2. Û peyamên para şêran (!!! 90 ji 138 di yekî û 297 ji 344 di ya din!!!) ev form hene:

Nirxandina serbixwe ya PVS-Studio (Linux, C++)

Pirtextî li ber çavan nagire

Di derheqê guhêrbarên neguhêrbar an lûleyên bêdawî de gelek pozîtîfên derewîn hene, dema ku xebata bi van guherbaran re ji mijarên cihêreng pêk tê, û ger ne wusa bûya, wê hingê ceribandinên yekîneyê dê nexebitin.

Nirxandina serbixwe ya PVS-Studio (Linux, C++)

Lêbelê, analîzatorek statîk dikare vê yekê jî bihesibîne? Nizanim.

Encam

PVS di projeyên min ên çavkaniya vekirî de xeletiyên rastîn nedît bidirîne и Piştî, û her weha di pêşnûmeyek xebatê de, ku ji ber sedemên diyar, ez nikarim pêşkêş bikim. Rast e, hêja ye ku ji bîr mekin ku hin kêmasiyên berê berê hatine girtin û rast kirin Cppcheck и scan-build.

Bi gelemperî, bandora van hemî analîzkeran hema hema yek e: erê, ew tiştek digirin, carinan carinan jî tiştek girîng e, lê bi tevahî berhevkar bes e.

Mimkun e (û ez bi xwe dixwazim wusa bifikirim) ku tîmê me pratîkên pêşkeftina nermalavê bikar tîne ku destûrê dide me ku em hindiktirîn kodek şîrîn biafirînin. Çêtir e ku pirsgirêkan çênekin ji bi qehremanî derbaskirina wan çêtir e.

Ji ber vê yekê, ez azad dibim ku hin şîretan bidim ka meriv çawa di C++-ê de bi vî rengî dinivîse ku lingên yekî neteqîne an jî bi kêzikê li eniya kesî nexe.

Ji tespîtkirina berhevkerê herî zêde bikar bînin

Tîma me vebijarkên berhevkirina jêrîn bikar tîne (û şîret li we dike):

-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

Di projeya xwe de wan çalak bikin û di derbarê koda xwe de pir tiştan fêr bibin.

Li gorî standardê bisekinin

Ger analogên standard hebin, biceribînin ku tiştên girêdayî platformê bikar neynin, û heke hûn bi tevahî nikaribin bêyî wan bikin, wan ji bo makroyan (an tiştek din) di blokên taybetî de bipêçin û bi tenê nehêlin koda we di bin şert û mercên nepiştgirî de were berhev kirin.

Bi semantîka xebata standard ve girêdayî bin

Pêvekirin divê zêdebûn be, pirkirin divê pirkirin be, banga fonksiyonê divê banga fonksiyonê be, kopî divê kopî be, hilgirtin divê were hilgirtin, konteynir divê dubare be, îterator divê promosyonê hebe. ++ û jêderxistin *. Û filan û bêvan.

Ez difikirim ku fikir zelal e. Peymanên sazkirî hene ku ne girêdayî ne, lê hemî bikarhêner û xwendevanên koda we hêvî dikin ku bibînin. Hewl nedin ku kesên din bixapînin, wekî din hûn ê xwe bixapînin.

Koda lihevhatî binivîsin

Berî her tiştî, mebesta min pirtûkxaneya standard e. Pir tê xwestin ku navberên çîn û fonksiyonên we bi pirtûkxaneyên standard û yên din re bêne bikar anîn (mînak, Boost).

Hûn bi dilxwazî ​​li navberên STL û Boost binêrin. Ji bilî îstîsnayên kêm, hûn ê li wir modelek rola hêja bibînin.

Ji amûrên çavkaniya vekirî herî zêde bikar bînin

Ji bo heman analîza statîk, bi kêmî ve du amûrên belaş ên vekirî hene ku dikarin bi pergala avakirina CMake re tenê carekê bi her projeyek ve werin girêdan.

Hûn dikarin li ser vê yekê di weşana min a dawî de bêtir bixwînin.

Paşê

Di dawiyê de, ez dixwazim tekez bikim ku ez naxwazim ku PVS an analîzkerên din ên statîk bikar neynin. Lê ez ji we re teşwîq dikim ku hûn bifikirin ka çawa çêbû ku analîstê statîk bi domdarî di koda we de xeletiyên girîng dibîne.

Ev tenê encamek e. Divê em li sedemê bigerin û ji holê rakin.

Source: www.habr.com

Add a comment