د PVS-Studio خپلواکه بیاکتنه (لینکس، C++)

ما یوه خپرونه ولیده چې PVS د لینکس لاندې تحلیل کول زده کړل، او پریکړه یې وکړه چې دا په خپلو پروژو کې هڅه وکړم. او دا هغه څه دي چې له هغې څخه راوتلي دي.


منځپانګې

  1. Плюсы
  2. Минусы
  3. پایلې
  4. وروسته

Плюсы

ځواب ویونکی ملاتړ

ما د محاکمې کیلي غوښتنه وکړه او دوی په هماغه ورځ ما ته واستول.

په کافي اندازه روښانه اسناد

موږ پرته له کومې ستونزې شنونکی په لاره اچولی شو. د کنسول کمانډونو لپاره مرسته هم شتون لري (که څه هم دلته ځینې شکایتونه شتون لري، برخه وګورئ Минусы).

د څو اړخیزو تحلیلونو امکان

شنونکی یو "معیاري" اختیار لري -j، تحلیل ته اجازه ورکوي چې په موازي ډول په څو دندو کې ترسره شي. دا ډیر وخت خوندي کوي.

ښه لید

ډیری بیلابیل محصول فارمیټونه، له متن څخه تر کوچني ویب موزیل پورې. د ویب انٹرفیس اسانه، لنډ، په کوډ کې د لینونو تر څنګ د اشارو او د تشخیصي توضیحاتو لینکونو سره.

په مجلس کې اسانه ادغام

ټول اسناد د دوی په ویب پاڼه کې دي، زه یوازې کولی شم ووایم چې که ستاسو پروژه د CMake په کارولو سره جوړه شوې وي، نو هرڅه خورا ساده دي.

ښه تشخیصي توضیحات

که تاسو په حالت کې محصول تولید کړئ fullhtml، بیا هر پیغام د تشخیص توضیحاتو سره لینک لري ، د توضیحاتو ، کوډ مثالونو او اضافي لینکونو سره.

Минусы

د شنونکي لخوا د C++ ژبې ناپوهي

له بده مرغه، PVS ځینې وختونه نحوي تېروتنې کوي او غلط مثبت پیغامونه تولیدوي کله چې کوډ په بشپړه توګه سم وي.

د مثال په توګه، یو فنکشن شتون لري چې بیرته راځي 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 د ګیټ وے وخت ختم شو.

ژبه

ټول توضیحات په روسیه کې دي، کوم چې خورا ښه دی. مګر د راپور لینکونه تل د انګلیسي نسخې ته لیږدول کیږي. دا به ښه وي چې ژبه بدله کړئ ترڅو تاسو په روسیه کې سمدلاسه تشخیص وګورئ. ما په انٹرفیس کې داسې اختیار ونه موند.

د کنسول له لارې د تشخیصی کچو سره کار کول ناشونی دی

راځئ چې د دې حقیقت سره پیل وکړو چې دوه حکمونه کارول شوي (دا 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

د کارن انٹرفیسونو کې د بټ ماسک کارول عموما خراب شکل دی. دا ټول په داخلي توګه لنډیز کیدی شي، او د بیرغونو سیټ د کارونکي لپاره ټاکل کیدی شي.

برسېره پر دې، یو افادیت هم شتون لري 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

ځینې ​​"سطحې" دلته راڅرګند شوي چې مخکې شتون نه درلود، او ما په اسنادو کې د دوی په اړه څه ونه موندل.

په عمومي توګه، دا روښانه نه ده. له همدې امله ما هر څه اعظمي حد ته تنظیم کړل.

په کیچ کې د احمقانو یوه ډله

د دریو پروژو څخه دوه چې ما تحلیل کړي د یونټ ازموینې کتابتون کاروي Catch2. او د پیغامونو لویه برخه (!!! 90 له 138 څخه په یوه کې او 297 له 344 څخه په بل کې!!!) لاندې بڼه لري:

د PVS-Studio خپلواکه بیاکتنه (لینکس، C++)

ملټي ریډینګ په پام کې نه نیسي

د نه بدلیدونکي تغیراتو یا نه ختمیدونکي لوپونو په اړه ډیری غلط مثبتونه شتون لري ، پداسې حال کې چې د دې متغیرونو سره کار د مختلف تارونو څخه پیښیږي ، او که دا داسې نه وي ، نو د واحد ازموینې به کار ونکړي.

د PVS-Studio خپلواکه بیاکتنه (لینکس، C++)

په هرصورت، ایا یو جامد شنونکی کولی شي دا په پام کې ونیسي؟ نه پوهیږم.

پایلې

PVS زما د خلاصې سرچینې پروژو کې هیڅ ریښتیني بګ ونه موندل ورننوتي и پراکسیما، او همدارنګه په کاري مسوده کې ، کوم چې د څرګندو دلایلو لپاره ، زه نشم کولی وړاندې کړم. ریښتیا، دا د یادولو وړ ده چې ځینې نیمګړتیاوې لا دمخه د کارولو دمخه نیول شوي او سم شوي Cppcheck и scan-build.

په عموم کې ، د دې ټولو تحلیل کونکو تاثر نږدې ورته دی: هو ، دوی یو څه نیسي ، ځینې وختونه حتی یو څه مهم ، مګر په ټولیز ډول تالیف کونکی کافی دی.

دا ممکنه ده (او زه په شخصي توګه دا فکر کول خوښوم) چې زموږ ټیم د سافټویر پرمختیایي کړنې کاروي چې موږ ته اجازه راکوي چې لږترلږه اندازه کوډ تولید کړو. دا غوره ده چې ستونزې رامینځته نه کړئ د دې په پرتله چې په زړورتیا سره یې بریالي کړئ.

له همدې امله، زه په C++ کې د لیکلو څرنګوالی په اړه د یو څه مشورې ورکولو آزادی لرم لکه څنګه چې د چا پښې و نه غورځول شي یا د چا په تندي سره په ریک سره ووهل شي.

د کمپیلر تشخیص څخه ډیره ګټه پورته کړئ

زموږ ټیم د لاندې تالیف اختیارونه کاروي (او تاسو ته مشوره درکوي)

-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

دوی په خپله پروژه کې فعال کړئ او د خپل کوډ په اړه ډیر څه زده کړئ.

په معیار ولاړ شه

هڅه وکړئ په پلیټ فارم پورې تړلي شیان ونه کاروئ که چیرې معیاري انلاګونه شتون ولري ، او که تاسو په بشپړ ډول د دوی پرته نشي کولی ، نو د میکرو (یا بل څه) لپاره په ځانګړي بلاکونو کې یې وتړئ او په ساده ډول اجازه مه ورکوئ چې ستاسو کوډ د غیر ملاتړ شوي شرایطو لاندې تنظیم شي.

د معیاري عملیاتو سیمانټیکونو ته ولاړ شئ

اضافه باید اضافه وي، ضرب باید ضرب وي، فنکشن کال باید فنکشن کال وي، کاپي باید کاپي وي، کیری باید کیری وي، کانټینر باید تکراري وي، تکرارونکی باید ترویج ولري ++ او حواله کول *. او داسې نور او داسې نور.

زه فکر کوم چې نظر روښانه دی. دلته تاسیس شوي کنوانسیونونه شتون لري چې پابند ندي، مګر دا چې ستاسو د کوډ ټول کاروونکي او لوستونکي د لیدلو تمه لري. هڅه مه کوه چې نورو ته سپکاوی وکړئ، که نه نو تاسو به خپل ځان مات کړئ.

مناسب کوډ ولیکئ

تر ټولو لومړی، زما مطلب معیاري کتابتون دی. دا خورا مطلوب دی چې ستاسو د ټولګیو او دندو انٹرفیسونه د معیاري او نورو کتابتونونو سره وکارول شي (د مثال په توګه ، بوسټ).

د STL او بوسټ انٹرفیسونو ته د لیدو لپاره وړیا احساس وکړئ. د نادر استثناء سره، تاسو به هلته د پام وړ رول ماډل وګورئ.

د خلاصې سرچینې وسیلو څخه ډیره ګټه پورته کړئ

د ورته جامد تحلیل لپاره ، لږترلږه دوه خلاص وړیا وسیلې شتون لري چې یوازې یو ځل د CMake جوړونې سیسټم سره هرې پروژې سره وصل کیدی شي.

تاسو کولی شئ پدې اړه نور زما په وروستي خپرونه کې ولولئ.

وروسته

په نهایت کې، زه غواړم ټینګار وکړم چې زه د PVS یا کوم بل جامد تحلیل کونکي نه کارولو پلوی نه یم. مګر زه تاسو هڅوم چې د دې په اړه فکر وکړئ چې دا څنګه پیښ شوي چې جامد شنونکی په دوامداره توګه ستاسو په کوډ کې د پام وړ غلطۍ ومومي.

دا یوازې یوه پایله ده. موږ باید د علت په لټه کې او له منځه یوسو.

سرچینه: www.habr.com

Add a comment