بدقسمتي سان، 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
ڪجهه ”سطحون“ هتي ظاهر ٿيا جيڪي اڳي نه هئا، ۽ مون کي انهن بابت دستاويزن ۾ ڪجهه به نه مليو.
عام طور تي، اهو واضح ناهي. ان ڪري مون هر شي کي وڌ ۾ وڌ مقرر ڪيو.
انھن کي پنھنجي پروجيڪٽ ۾ فعال ڪريو ۽ توھان جي ڪوڊ بابت گھڻو سکو.
معيار تي قائم رکو
پليٽ فارم تي منحصر شين کي استعمال ڪرڻ جي ڪوشش نه ڪريو جيڪڏهن معياري اينالاگ موجود آهن، ۽ جيڪڏهن توهان بلڪل انهن کان سواء نٿا ڪري سگهو، انهن کي خاص بلاڪ ۾ ميڪرو (يا ٻيو ڪجهه) لاء لپي ڪريو ۽ صرف توهان جي ڪوڊ کي ترتيب ڏيڻ نه ڏيو غير معاون حالتن هيٺ.
معياري آپريشن سيمينٽڪس ڏانهن لٺ
اضافو ضرور هجڻ گهرجي، ضرب کي ضرب هجڻ گهرجي، فنڪشن ڪال هجڻ گهرجي فنڪشن ڪال، ڪاپي ڪاپي هجڻ گهرجي، کڻڻ لازمي آهي، ڪنٽينر کي ٻيهر قابل هجڻ گهرجي، آئٽرٽر کي فروغ ڏيڻ گهرجي ++ ۽ حوالو ڏيڻ *. وغيره وغيره.
مان سمجهان ٿو ته خيال واضح آهي. اتي قائم ڪيل ڪنوينشن آھن جيڪي پابند نه آھن، پر جيڪي توھان جي ڪوڊ جا سڀئي استعمال ڪندڙ ۽ پڙهندڙن کي ڏسڻ جي اميد رکن ٿا. ٻين کي اڳتي وڌائڻ جي ڪوشش نه ڪريو، ٻي صورت ۾ توهان پنهنجو پاڻ کي اڳتي وڌايو.
مطابقت وارو ڪوڊ لکو
سڀ کان اول، منهنجو مطلب معياري لائبريري. اهو انتهائي گهربل آهي ته توهان جي طبقن ۽ افعال جا انٽرفيس معياري ۽ ٻين لائبريرين سان استعمال ڪري سگهجن ٿيون (مثال طور، بوسٽ).
STL ۽ بوسٽ انٽرفيس تي هڪ نظر وجهڻ لاءِ آزاد ٿيو. نادر استثنا سان، توهان اتي هڪ قابل ڪردار نموني ڏسندا.
اوپن سورس ٽولز مان وڌ کان وڌ استعمال ڪريو
ساڳئي جامد تجزيو لاء، گهٽ ۾ گهٽ ٻه کليل مفت اوزار آهن جيڪي صرف هڪ ڀيرو ڳنڍيل هوندا آهن ڪنهن به منصوبي سان CMake تعمير سسٽم سان.
آخرڪار، مان زور ڀرڻ چاهيان ٿو ته مان PVS يا ڪنهن ٻئي جامد تجزيي کي استعمال نه ڪرڻ جي صلاح نه ڪري رهيو آهيان. پر مان توهان کي حوصلا افزائي ڪريان ٿو انهي بابت سوچڻ لاءِ ته اهو ڪيئن ٿيو ته جامد تجزيي ڪندڙ مسلسل توهان جي ڪوڊ ۾ اهم غلطيون ڳولي ٿو.
اهو صرف هڪ نتيجو آهي. اسان کي ان جو سبب ڳولڻ ۽ ختم ڪرڻ جي ضرورت آهي.