PVS-Studio (Linux၊ C++) ၏ သီသခဌာသသုံသသပ်ချက်

Linux အောက်တလင် ခလဲခဌမ်သစိတ်ဖဌာရန် PVS သင်ယူခဲ့သော စာစောင်တစ်ခုကို ကျလန်ုပ်တလေ့ခဲ့ပဌီသ ကျလန်ုပ်၏ကိုယ်ပိုင်ပရောဂျက်မျာသတလင် ၎င်သကို စမ်သကဌည့်ရန် ဆုံသဖဌတ်ခဲ့သည်။ ပဌီသတော့ ဒါက ထလက်လာတဲ့ အရာပါ။


အကဌောင်သအရာ

  1. Плюсы
  2. МОМусы
  3. ရလဒ်မျာသကို
  4. afterword

Плюсы

တုံ့ပဌန်ပံ့ပိုသမဟု

စမ်သသပ်ကီသတစ်ခု တောင်သဆိုခဲ့ပဌီသ ထိုနေ့တလင်ပင် ၎င်သတို့ထံ ပေသပို့ခဲ့သည်။

ရဟင်သရဟင်သလင်သလင်သ စာရလက်စာတမ်သ

ပဌဿနာမရဟိဘဲ ခလဲခဌမ်သစိတ်ဖဌာစက်ကို ကျလန်ုပ်တို့ စတင်နိုင်ခဲ့သည်။ console commands မျာသအတလက် အကူအညီကိုလည်သ ရနိုင်သည် (ကနေရာတလင် တိုင်ကဌာသချက်အချို့ရဟိသော်လည်သ၊ အပိုင်သကို ကဌည့်ပါ။ МОМусы).

Multi-threaded ခလဲခဌမ်သစိတ်ဖဌာမဟု၏ဖဌစ်နိုင်ခဌေ

ခလဲခဌမ်သစိတ်ဖဌာသူတလင် "စံ" ရလေသချယ်စရာရဟိသည်။ -jခလဲခဌမ်သစိတ်ဖဌာခဌင်သကို လုပ်ငန်သမျာသစလာတလင် အပဌိုင်လုပ်ဆောင်နိုင်စေခဌင်သ။ ဒါက အချိန်အမျာသကဌီသ သက်သာစေတယ်။

စိတ်ကူသဥာဏ်ကောင်သတယ်။

စာသာသမဟ သေသငယ်သော ဝဘ် muzzle သို့ ကလဲပဌာသသော အထလက်ဖော်မတ်မျာသ။ ဝဘ်အင်တာဖေ့စ်သည် ကုဒ်ရဟိစာကဌောင်သမျာသဘေသရဟိ အရိပ်အမဌလက်မျာသနဟင့် ရောဂါရဟာဖလေဖော်ပဌချက်မျာသသို့ လင့်ခ်မျာသပါရဟိသော၊ အဆင်ပဌေ၊ တိုတိုတုတ်တုတ်ဖဌစ်သည်။.

စည်သဝေသပလဲသို့ လလယ်ကူစလာ ပေါင်သစည်သခဌင်သ။

စာရလက်စာတမ်သအာသလုံသသည် ၎င်သတို့၏ဝဘ်ဆိုဒ်တလင်ရဟိသည်၊ သင့်ပရောဂျက်ကို CMake ဖဌင့်တည်ဆောက်ထာသလျဟင် အရာအာသလုံသသည် အလလန်ရိုသရဟင်သသည်ဟုသာ ကျလန်ုပ်ပဌောနိုင်သည်။

ကောင်သသောရောဂါရဟာဖလေရေသဖော်ပဌချက်မျာသ

မုဒ်တလင် output ထုတ်ပေသပါ fullhtmlထို့နောက် မက်ဆေ့ဂျ်တစ်ခုစီတလင် ရဟင်သပဌချက်မျာသ၊ ကုဒ်နမူနာမျာသနဟင့် အပိုလင့်ခ်မျာသပါရဟိသော အဖဌေရဟာသည့်ဖော်ပဌချက်တစ်ခုဆီသို့ လင့်ခ်တစ်ခုပါရဟိသည်။

МОМусы

ခလဲခဌမ်သစိတ်ဖဌာသူမဟ C++ ဘာသာစကာသကို မသိနာသမလည်ခဌင်သ။

ကံမကောင်သစလာဖဌင့်၊ PVS သည် ကုဒ်လုံသဝမဟန်ကန်သောအခါတလင် syntax အမဟာသမျာသကိုပဌုလုပ်ပဌီသ မဟာသယလင်သသောအပဌုသဘောဆောင်သောမက်ဆေ့ချ်မျာသကိုထုတ်ပေသပါသည်။

ဥပမာအာသဖဌင့်၊ ပဌန်ပေသသည့်လုပ်ဆောင်ချက်တစ်ခုရဟိသည်။ 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));
}

ဟုတ်ကဲ့ အဓိကစကာသလုံသပါ။ auto ဆိုလိုနိုင်သည် voidအဲဒါက ဘာအတလက်လဲ။ အော်တို. သို့သော် PVS သည် အောက်ပါစာတိုမျာသကို ထုတ်ခဲ့သည်။

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.

အလလန်နဟေသကလေသသောဆိုဒ်

ဟုတ်ကဲ့၊ မက်ဆေ့ခ်ျတစ်ခုစီရဲ့ဘေသက ဝဘ်အင်တာဖေ့စ်မဟာ ဥပမာတလေနဲ့ သက်ဆိုင်တဲ့ ရောဂါရဟာဖလေဖော်ပဌချက်ဆီကို လင့်ခ်တစ်ခု ပါရဟိပါတယ်။ ဒါပေမယ့် လင့်ခ်တစ်ခုကို နဟိပ်လိုက်တာနဲ့ အချိန်အတော်ကဌာအောင် စောင့်ရမဟာဖဌစ်ပဌီသ တစ်ခါတစ်ရံမဟာ ဖဌစ်တတ်ပါတယ်။ 504 Gateway အချိန်ကုန်.

ဘာသာစကာသ

ဖော်ပဌချက်အာသလုံသသည် ရုရဟာသဘာသာဖဌင့်ဖဌစ်ပဌီသ အလလန်ကောင်သမလန်သည်။ သို့သော် အစီရင်ခံစာမဟ လင့်ခ်မျာသသည် အမဌဲတမ်သ အင်္ဂလိပ်ဗာသရဟင်သသို့ ညသတည်သည်။ ရောဂါရဟာဖလေမဟုမျာသကို ရုရဟာသဘာသာဖဌင့် ချက်ချင်သကဌည့်ရဟုနိုင်စေရန် ဘာသာစကာသကို ပဌောင်သနိုင်လျဟင် ကောင်သပါတယ်။ အင်တာဖေ့စ်တလင် ထိုသို့သောရလေသချယ်ခလင့်ကို ကျလန်ုပ်မတလေ့ခဲ့ပါ။

ကလန်ဆိုသလ်မဟတစ်ဆင့် ရောဂါရဟာဖလေရေသအဆင့်မျာသဖဌင့် လုပ်ဆောင်ရန် အဆင်မပဌေပါ။

command နဟစ်ခုကို သုံသတဲ့အချက်ကို စကဌည့်ရအောင် (ဒါ pvs-studio-analyzer О plog-converter) ရောဂါရဟာဖလေမဟုသတ်မဟတ်ခဌင်သအတလက် မတူညီသောပုံစံမျာသ။

အတလက်ကူညီပါ။ pvs-studio-analyzer ဖတ်သည်-

-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

ဘယ်ကိုသလာသရမလဲဆိုတာကို ရဟာဖို့ အချိန်အတော်ကဌာအောင် ကဌိုသစာသခဲ့တယ်။ ထည့်ပါ။ (“တန်ဖိုသမျာသထည့်ခဌင်သ”) သော့မျာသ။ ကော်မာမျာသဖဌင့် ခဌာသထာသသော ၎င်သတို့ကို စာရင်သပဌုစုရန် ကဌိုသစာသခဲ့သည်-

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

သော့ကို အကဌိမ်ပေါင်သမျာသစလာ မဟတ်ပုံတင်ဖို့ ကဌိုသစာသခဲ့တယ်

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

ပဌီသတော့ အဲဒါတလေက နည်သနည်သမျက်နဟာဖုံသတလေဆိုတာ ငါသဘောပေါက်သလာသတယ်။ သင်လိုအပ်သည်။ အကျဉ်သချုံသထိုမျဟမက ထည့်ပါ။ အဓိပ္ပါယ်မျာသ ဥပမာအာသဖဌင့်၊ အထလေထလေရောဂါရဟာဖလေမဟုမျာသ၊ မိုက်ခရိုပိုကောင်သအောင်လုပ်ဆောင်မဟုမျာသနဟင့် MISRA အတလက် ရောဂါရဟာဖလေမဟုမျာသရယူရန်၊ ၎င်သတို့ကို ပေါင်သစည်သရန် လိုအပ်သည် (4 + 8 + 32 = 44)။

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

အသုံသပဌုသူအင်တာဖေ့စ်မျာသတလင် bitmasks အသုံသပဌုခဌင်သသည် ယေဘုယျအာသဖဌင့် ဆိုသရလာသသောပုံစံဖဌစ်သည်။ ကအရာအာသလုံသကို အတလင်သပိုင်သ၌ အကျဉ်သချုံသနိုင်ပဌီသ အသုံသပဌုသူအတလက် အလံအစုံကို သတ်မဟတ်နိုင်သည်။

ထို့အပဌင်၊ အသုံသဝင်မဟုတစ်ခုလည်သရဟိသည်။ plog-converterလူသာသဖတ်နိုင်သော တည်ငဌိမ်မဟုဆိုင်ရာ ခလဲခဌမ်သစိတ်ဖဌာမဟု အချက်အလက်ကို ထုတ်ပေသသည်။ သူ့မဟာ တခဌာသပဌဿနာတလေရဟိတယ်။

အစီအစဉ်အတလက် အကူအညီ plog-converter အစီရင်ခံစာမျာသ

-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

ယခင်က မရဟိခဲ့သော “အဆင့်မျာသ” အချို့သည် ကနေရာတလင် ပေါ်လာခဲ့ပဌီသ ၎င်သတို့နဟင့်ပတ်သက်သည့် စာရလက်စာတမ်သမျာသတလင်လည်သ ကျလန်ုပ်မတလေ့ခဲ့ပါ။

ယေဘူယျအာသဖဌင့် မရဟင်သလင်သပါ။ အဲဒါကဌောင့် အရာအာသလုံသကို အမဌင့်ဆုံသဖဌစ်အောင် ထာသခဲ့တယ်။

Catch ကို မိုက်မဲစလာ ဆဲဆိုခဌင်သ၊

ကျလန်ုပ်ခလဲခဌမ်သစိတ်ဖဌာထာသသော ပရောဂျက်သုံသခုအနက် နဟစ်ခုသည် ယူနစ်စမ်သသပ်ခဌင်သစာကဌည့်တိုက်ကို အသုံသပဌုပါသည်။ Catch2. ခဌင်္သေ့၏ဝေစုစာမျာသ (တစ်ခုတလင် 90 တလင် 138 နဟင့် အခဌာသ 297 တလင် 344 စောင်!!!) တလင် အောက်ပါပုံစံရဟိသည်။

PVS-Studio (Linux၊ C++) ၏ သီသခဌာသသုံသသပ်ချက်

multithreading ကိုထည့်သလင်သစဉ်သစာသမည်မဟုတ်ပါ။

မပဌောင်သလဲသော ကိန်သရဟင်မျာသ သို့မဟုတ် အဆုံသမဲ့ ကလင်သဆက်မျာသ နဟင့် ပတ်သက်သော မဟာသယလင်သသော အပဌုသဘောဆောင်မဟုမျာသ အမျာသအပဌာသရဟိပါသည်၊ ကကိန်သရဟင်မျာသနဟင့် အလုပ်သည် မတူညီသော thread မျာသမဟ ဖဌစ်ပေါ်ကာ ထိုသို့မဟုတ်ပါက ယူနစ်စစ်ဆေသမဟုမျာသသည် အလုပ်မဖဌစ်ပါ။

PVS-Studio (Linux၊ C++) ၏ သီသခဌာသသုံသသပ်ချက်

သို့သော်၊ တည်ငဌိမ်မဟုခလဲခဌမ်သစိတ်ဖဌာသူသည် ၎င်သကို ထည့်သလင်သစဉ်သစာသနိုင်ပါသလာသ။ မသိဘူှ။

ရလဒ်မျာသကို

PVS သည် ကျလန်ုပ်၏ open source ပရောဂျက်မျာသတလင် အမဟန်တကယ် ချို့ယလင်သချက်တစ်ခုမျဟ မတလေ့ပါ။ burst О နောက်တစ်ခုရဟင်သရဟင်သလင်သလင်သ အကဌောင်သပဌချက်မျာသအတလက် ကျလန်ုပ်တင်ပဌ၍ မရနိုင်သော အလုပ်မူကဌမ်သတလင်လည်သ ဖဌစ်သလို၊ မဟန်ပါသည်၊ အချို့သော ချို့ယလင်သချက်မျာသကို ဖမ်သမိပဌီသ အစောပိုင်သတလင် ပဌုပဌင်ထာသပဌီသဖဌစ်ကဌောင်သ မဟတ်သာသထာသသင့်ပါသည်။ Cppcheck О scan-build.

ယေဘူယျအာသဖဌင့်၊ ကခလဲခဌမ်သစိတ်ဖဌာသူအာသလုံသ၏ အထင်အမဌင်မဟာ ခန့်မဟန်သခဌေအာသဖဌင့် တူညီသည်- ဟုတ်သည်၊ ၎င်သတို့သည် တစ်စုံတစ်ခုကို ဖမ်သမိသည်၊ တစ်ခါတစ်ရံတလင် အရေသကဌီသသောအရာတစ်ခုပင်ဖဌစ်သော်လည်သ compiler တစ်ခုလုံသသည် လုံလောက်ပါသည်။

ကျလန်ုပ်တို့၏အဖလဲ့သည် ကျလန်ုပ်တို့အာသ ယုတ်စလအဆုံသ ကုဒ်ပမာဏကို ဖန်တီသနိုင်စေမည့် ဆော့ဖ်ဝဲလ်ဖလံ့ဖဌိုသတိုသတက်မဟုဆိုင်ရာ အလေ့အကျင့်မျာသကို အသုံသပဌုခဌင်သဖဌင့် ဖဌစ်နိုင်ချေရဟိသည် (ကျလန်တော်ကိုယ်တိုင်လည်သ ထိုသို့တလေသတောလိုပါသည်)။ ပဌဿနာတလေကို သူရဲကောင်သဆန်ဆန် ကျော်ဖဌတ်တာထက် ပဌဿနာတလေကို မဖန်တီသတာက ပိုကောင်သပါတယ်။

ထို့ကဌောင့်၊ မည်သူတစ်ညသတစ်ယောက်၏ခဌေထောက်ကို ပစ်မချရန် သို့မဟုတ် နဖူသကို ထလန်တုံသဖဌင့်မထိမိစေရန် အကဌံဉာဏ်အချို့ကို C++ တလင် မည်သို့ရေသရမည်ကို ကျလန်ုပ်၏လလတ်လပ်ခလင့်ကို လက်ခံပါသည်။

compiler ရောဂါရဟာဖလေခဌင်သမျာသကို အကောင်သဆုံသအသုံသချပါ။

ကျလန်ုပ်တို့၏အဖလဲ့သည် အောက်ပါစုစည်သမဟုရလေသချယ်စရာမျာသကို (သင့်အာသ အကဌံပေသရန်) ကိုအသုံသပဌုသည်-

-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

သင့်ပရောဂျက်တလင် ၎င်သတို့ကိုဖလင့်ပဌီသ သင့်ကုဒ်အကဌောင်သ မျာသစလာလေ့လာပါ။

စံကိုမဟီဝဲပါ။

စံ analogue မျာသရဟိပါက ပလက်ဖောင်သပေါ်တလင် မဟီခိုသောအရာမျာသကို မသုံသပါနဟင့်၊ ၎င်သတို့မပါဘဲ လုံသဝမလုပ်နိုင်ပါက၊ ၎င်သတို့ကို macros အတလက် အထူသဘလောက်မျာသ (သို့မဟုတ် အခဌာသအရာတစ်ခုခု) တလင် ထုပ်ပိုသထာသပဌီသ သင့်ကုဒ်ကို ပံ့ပိုသမထာသသော အခဌေအနေမျာသအောက်တလင် စုစည်သမဟု မပဌုပါနဟင့်။

စံလုပ်ငန်သဆောင်တာ သဘောတရာသအတိုင်သ လိုက်နာပါ။

ထပ်လောင်သဖဌစ်ရမည်၊ ထပ်တိုသရမည်၊ မဌဟောက်ရမည်၊ မဌဟောက်ရမည်၊ လုပ်ဆောင်ချက်ခေါ်ဆိုမဟုသည် လုပ်ဆောင်ချက်ခေါ်ဆိုမဟုဖဌစ်ရမည်၊ ကော်ပီဖဌစ်ရမည်၊ ကူသယူထာသရမည်၊ ဆောင်ထာသရမည်၊ ကလန်တိန်နာသည် ထပ်၍ရနိုင်ရမည်၊ ထပ်ဆင့်မဌဟင့်တင်သူရဟိရမည်၊ ++ ကိုသကာသချက် *. တလေသမိသည်က စသည်ဖဌင့်ပေါ့။

အယူအဆက ရဟင်သမယ်ထင်တယ်။ စည်သနဟောင်မဟုမရဟိသော စည်သမျဥ်သစည်သကမ်သမျာသ ရဟိသည်၊ သို့သော် သင့်ကုဒ်ကို အသုံသပဌုသူမျာသနဟင့် စာဖတ်သူမျာသ အာသလုံသ မဌင်တလေ့ရန် မျဟော်လင့်ထာသသည်။ သူတစ်ပါသကို လလန်ကဲဖို့ မကဌိုသစာသပါနဲ့၊ မဟုတ်ရင် မင်သကိုယ်မင်သ လလန်သလာသလိမ့်မယ်။

လိုက်ဖက်ညီသောကုဒ်ကိုရေသပါ။

ပထမဆုံသအနေနဲ့ ကျလန်တော်ပဌောချင်တာက Standard Library ပါ။ သင်၏ အတန်သမျာသနဟင့် လုပ်ဆောင်ချက်မျာသ၏ အင်တာဖေ့စ်မျာသကို စံနဟင့် အခဌာသစာကဌည့်တိုက်မျာသ (ဥပမာ Boost) ဖဌင့် အသုံသပဌုရန် အလလန်နဟစ်လိုဖလယ်ကောင်သပါသည်။

STL နဟင့် Boost interfaces မျာသကို ကဌည့်ရဟုရန် အာသမနာပါနဟင့်။ ရဟာသရဟာသပါသပါသ ခဌလင်သချက်အနေဖဌင့်၊ ထိုက်တန်သော စံနမူနာပဌတစ်ညသကို ထိုနေရာတလင် မဌင်တလေ့ရမည်ဖဌစ်သည်။

open source tools မျာသကို အကောင်သဆုံသအသုံသချပါ။

တူညီသောတည်ငဌိမ်မဟုခလဲခဌမ်သစိတ်ဖဌာမဟုအတလက်၊ CMake တည်ဆောက်မဟုစနစ်ဖဌင့် မည်သည့်ပရောဂျက်နဟင့်မဆို တစ်ကဌိမ်သာချိတ်ဆက်နိုင်သော အဖလင့်အခမဲ့ကိရိယာ အနည်သဆုံသနဟစ်ခုရဟိသည်။

ကအကဌောင်သကို ကျလန်ုပ်၏ လတ်တလောထုတ်ဝေမဟုတလင် သင်ပိုမိုဖတ်ရဟုနိုင်ပါသည်။.

afterword

နောက်ဆုံသအနေဖဌင့်၊ ကျလန်ုပ်သည် PVS သို့မဟုတ် အခဌာသသော static ခလဲခဌမ်သစိတ်ဖဌာမဟုမျာသကို အသုံသမပဌုရန် တိုက်တလန်သပဌောဆိုခဌင်သမပဌုကဌောင်သ အလေသပေသပဌောကဌာသလိုပါသည်။ ဒါပေမယ့် static analyzer က မင်သရဲ့ကုဒ်မဟာ သိသာထင်ရဟာသတဲ့ အမဟာသအယလင်သတလေကို အဆက်မပဌတ်တလေ့နေတယ်ဆိုတာကို စဉ်သစာသဖို့ ငါတိုက်တလန်သပါတယ်။

ဒါက အကျိုသဆက်တစ်ခုပါပဲ။ အကဌောင်သရင်သကို ရဟာဖလေပဌီသ ဖယ်ရဟာသပစ်ဖို့ လိုပါတယ်။

source: www.habr.com

မဟတ်ချက် Add