استخدام محلل ثابت PVS-Studio في تطوير الأنظمة المدمجة في C و C ++

في هذه المقالة ، سوف تتعلم كيفية تشغيل فحص مشروع مضمن وكيفية التعامل مع تقرير المحلل. يدعم محلل PVS-Studio عددًا من المجمعين للأنظمة المدمجة. في الإصدار الحالي ، يمكن التحقق من المشروعات عند الإنشاء باستخدام أحد المترجمين التاليين لـ Window و Linux و macOS:


تركيب


يعتمد إجراء التثبيت على نظام التشغيل الذي تقوم بتطويره. ضمن Linux ، يمكنك تثبيت المحلل من المستودع أو من حزمة التثبيت.

مثال للأنظمة المعتمدة على دبيان:

wget -q -O - https://files.viva64.com/etc/pubkey.txt | sudo apt-key add - sudo wget -O /etc/apt/sources.list.d/viva64.list \ https://files.viva64.com/etc/viva64.list sudo apt update sudo apt install pvs-studio 

أو

 sudo gdebi pvs-studio-VERSION.deb 

بالنسبة لنظام التشغيل MacOS ، يمكن إجراء التثبيت والتحديث من Homebrew :

 brew install viva64/pvs-studio/pvs-studio brew upgrade pvs-studio 

الخيار الثاني هو تثبيت الحزمة من dmg أو فكها يدويًا من الأرشيف.

تحت Windows ، يتم إجراء التثبيت باستخدام برنامج التثبيت:


يمكنك تنزيل حزم التثبيت لجميع الأنظمة المدعومة ، وإذا لزم الأمر ، طلب مفتاح تجريبي في صفحة " تنزيل وتجربة PVS-Studio ".

بعد التثبيت ، أدخل مفتاح الترخيص. يمكنك العثور على معلومات حول كيفية القيام بذلك على منصات مختلفة ، وعلى صفحة الوثائق " كيفية الدخول إلى ترخيص PVS-Studio وماذا تفعل بعد ذلك ."

التحقق من المشروع


يمكن إجراء التحقق من المشروع للأنظمة المضمنة بنفس الطرق كما في حالة التطوير في أنظمة Windows و Linux و macOS.

تمت مناقشة خيارات التشغيل لنظام التشغيل Linux في المقالة " التعريف بمحلل ثابت PVS-Studio عند تطوير برامج C ++ في بيئة Linux ". ضع في اعتبارك أنه نظرًا لاستخدام التحويل البرمجي المتداخل للبناء ضمن إطار مضمن ، وقد يكون اسم المترجم غير قياسي ، فقد تحتاج إلى تحديده عند تحليل المشروع. للقيام بذلك ، استخدم خيار سطر الأوامر –compiler أو –c :

 pvs-studio-analyzer analyze -c MyCompiler 

استخدم هذه المعلمة عندما يتعذر على المحلل تحديد نوع برنامج التحويل البرمجي المستخدم ، أي عند إصدار الخطأ "لم يتم العثور على وحدات ترجمة".

عند الترجمة المتداخلة ، نظرًا لأن النظام الأساسي المستهدف يختلف عن النظام الأساسي الذي يتم بموجبه التجميع ، مع المترجم ، فقد تحتاج إلى تحديد النظام الأساسي الهدف باستخدام المعلمة --platform ، وكذلك نوع المعالج المسبق (- المعالج).

المنصات المدعومة: win32 و x64 و linux32 و linux64 و macos و arm.

المعالجات المدعومة: gcc ، clang ، keil.

افتراضيًا ، يختار Linux نظام التشغيل linux64 و gcc preprocessor.

إذا كنت تستخدم Windows ، فيمكنك التحقق من المشروع في وضع مراقبة الترجمة. للقيام بذلك ، قم بتشغيل الأداة المساعدة " C و C ++ مراقبة مترجم UI " ، والذي تم تثبيته مع محلل. لبدء المراقبة ، انتقل إلى قائمة " أدوات " وانقر فوق " تحليل ملفاتك" ... يفتح مربع حوار:


انقر فوق الزر " بدء المراقبة " وقم بتشغيل الإنشاء. بعد الانتهاء ، انقر فوق الزر " إيقاف المراقبة " في مربع الحوار في الركن الأيمن السفلي من الشاشة:


يمكن عرض نتيجة الاختبار في الإطار الرئيسي لأداة " C و C ++ Compiler Monitoring UI ".

يمكنك أيضًا تشغيل التحليل من سطر الأوامر. لهذا ، يتم استخدام الأداة المساعدة CLMonitor. يمكنك البدء في المراقبة باستخدام الأمر:

 CLMonitor.exe monitor 

بعد اكتمال التجميع ، يجب تشغيل الأداة المساعدة في وضع التحليل:

 CLMonitor.exe analyze -l "<path>\out.plog" 

سيقوم المحلل بفحص المشروع وحفظ النتائج في الملف المحدد في المعلمة -l .

راجع أيضًا قسم الوثائق " نظام مراقبة التحويل البرمجي في PVS-Studio ".

العمل مع التقارير


لعرض التقرير تحت Linux ، تحتاج إلى تحويل الملف الذي تم الحصول عليه نتيجة للمحلل إلى أحد التنسيقات المدعومة باستخدام أداة plog-Converter . يمكنك الحصول على التقرير بتنسيق HTML مع إمكانية عرض التعليمات البرمجية المصدر باستخدام الأمر التالي:

 plog-converter -a GA:1,2 -t fullhtml /path/project.log -o /path/report_dir 

يوصف تحويل التقارير بمزيد من التفصيل في المقالة " التعرّف على محلل ثابت PVS-Studio عند تطوير برامج C ++ في Linux ".

ضمن Windows ، هناك أيضًا أداة مساعدة PlogConverter تتيح لك تحويل ملفات التقارير بطريقة مماثلة:

 PlogConverter.exe <path>\out.plog --renderTypes= FullHtml --analyzer=GA:1,2 

أو

 PlogConverter.exe D:\Projct\out.plog -t FullHtml -a GA:1,2 

أيضًا ، يمكن عرض تقرير بتنسيق plog باستخدام الأداة المساعدة " C و C ++ Compiler Monitoring UI " من خلال القائمة File-> Open PVS-Studio Log ...

مثال:


إذا لزم الأمر ، يمكنك من خلال هذه الأداة المساعدة تصدير التقرير إلى أحد التنسيقات المدعومة من خلال قائمة " ملف ".

معيار ميسرا


يقوم PVS-Studio بتصنيف التنبيهات وفقًا CWE و SEI CERT ، وهو مناسب لاختبار الأمان الثابت ( SAST ) للتطبيقات العادية. ومع ذلك ، فإن الأنظمة المدمجة بها متطلبات أمنية مختلفة قليلاً والتي يغطيها معيار MISRA المطور خصيصًا. يدعم الإصدار الحالي للمحلل جزءًا من القواعد من MISRA C و MISRA C ++ ، ويمكن الاطلاع على قائمة التشخيصات هنا ، وتتوسع باستمرار.

غالبًا ما يكون استخدام قواعد MISRA عند التحقق من المشروعات غير المخصصة للتضمين أمرًا غير مبرر. هذا بسبب تفاصيل المعيار. في معظم الحالات ، إذا لم يتم كتابة الكود في الأصل مع توقع امتثال MISRA ، فسيكون هناك الكثير من التحذيرات الخاطئة وغير المجدية أثناء الفحص. لذلك ، يتم تعطيل قواعد MISRA بشكل افتراضي.

لتمكين تحليل MISRA في نظام Linux ، تحتاج إلى تشغيل التحليل باستخدام مفتاح التبديل -a وتمرير المعلمة العددية التي تحدد الوضع المطلوب. هذه المعلمة هي مزيج من حقول البت:

 -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 

إطلاق المثال (تم تضمين GA و MISRA):

 pvs-studio-analyzer analyze -a 36 -o /path/report.log 

عند استخدام محول plog ، يجب أن تشير أيضًا إلى أنه يجب تضمين تشخيصات MISRA في التقرير:

 plog-converter -a MISRA:1,2,3 -m misra .... 

ضمن Windows ، يمكنك استخدام مربع حوار إعدادات الأداة المساعدة " C و C ++ Monitor UI ":


تم توضيح مزيد من التفاصيل حول دعم MISRA في المقالة " PVS-Studio: دعم معايير MISRA C و MISRA C ++ ".

استنتاج


في هذه المقالة ، استعرضنا إمكانات محلل PVS-Studio لاختبار المشاريع التي تركز على الأنظمة المدمجة. إذا كنت بحاجة إلى مزيد من المعلومات المفصلة حول كيفية استخدام المحلل ، أوصي بقراءة المقالات التالية:




إذا كنت ترغب في مشاركة هذه المقالة مع جمهور يتحدث الإنجليزية ، فالرجاء استخدام الرابط الخاص بالترجمة: Yuri Minaev. استخدام محلل ثابت PVS-Studio في تطوير C و C ++ للأنظمة المدمجة

Source: https://habr.com/ru/post/ar463335/


All Articles