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.
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:
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.
Lêbelê, analîzatorek statîk dikare vê yekê jî bihesibîne? Nizanim.
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):
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.
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.