التعرف على محلل ثابت PVS-Studio عند تطوير برامج C ++ في Linux

يدعم PVS-Studio تحليل المشروعات في C و C ++ و C # و Java. يمكنك استخدام المحلل ضمن أنظمة Windows و Linux و macOS. سوف يركز هذا المنشور على تحليل الشفرة المكتوبة في C و C ++ في بيئة Linux.

تركيب


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

تعتمد الأوامر التي يجب أن تكملها للتثبيت على توزيع 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 

لتثبيت PVS-Studio من حزمة التثبيت ، يمكنك استخدام الأداة المساعدة gdebi:

 sudo gdebi pvs-studio-VERSION.deb 

تم وصف عملية التثبيت بمزيد من التفصيل في قسم " تثبيت وتحديث PVS-Studio على Linux " في الوثائق. يمكنك أيضًا العثور على معلومات حول الأنظمة التي لا تستند إلى دبيان.

بعد التثبيت ، تحتاج إلى إدخال بيانات الترخيص. للقيام بذلك ، استخدم الأمر

 pvs-studio-analyzer credentials NAME KEY [-o LIC-FILE] 

حيث NAME و KEY هما الاسم الذي تم تسجيل الترخيص من أجله ومفتاح الترخيص. تتيح لك المعلمة –o الاختيارية تحديد المسار الذي سيتم من خلاله إنشاء ملف الترخيص. بشكل افتراضي ، يتم تخزينه في الدليل ~ / .config / PVS-Studio / .

يمكنك الحصول على المفتاح التجريبي في صفحة " تنزيل وتجربة PVS-Studio ".

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


بعد تثبيت محلل ، يمكنك البدء في التحقق من المشاريع. هناك طريقتان رئيسيتان للقيام بذلك:

  1. مراقبة التجميع
  2. بدءا من عملية التجميع مباشرة من نظام التجميع.

لننظر في الطريقة الأولى أولاً. لبدء المراقبة في نظام Linux ، ستحتاج إلى الأداة المساعدة. يستخدمه المحلل لجمع المعلومات حول العمليات التي تم إطلاقها أثناء تجميع المشروع.

يتم تنفيذ الإطلاق بواسطة الأمر التالي:

 pvs-studio-analyzer trace -- make 

يستخدم هذا المثال إنشاء باستخدام ، ولكن أي أمر آخر تستخدمه لبدء الإنشاء يمكن أن يكون في مكان إجراء. يمكن تمرير معلمات سطر الأوامر إليها بالطريقة المعتادة.

بعد التجميع ، سينشئ strace ملفًا سيستخدمه المحلل للتحقق من الكود المصدر. يمكنك تشغيل التحليل باستخدام الأمر

 pvs-studio-analyzer analyze -o /path/to/project.log 

سيكون الإخراج ملفًا مشفرًا مع النتائج ، يمكنك تحويله إلى أحد التنسيقات المدعومة. سننظر في العمل مع التقارير في القسم التالي.

بالإضافة إلى استخدام strace ، يمكن أيضًا تشغيل التحليل بناءً على ملف compile_commands.json (قاعدة بيانات JSON Compilation). تسمح لك العديد من أنظمة الإنشاء بتصدير أوامر استدعاء برنامج التحويل البرمجي ، أو يمكنك استخدام الأداة المساعدة BEAR لهذا الغرض. في هذه الحالة ، يمكنك تشغيل التحليل باستخدام الأمر

 pvs-studio-analyzer analyze –f /path/to/compile_commands.json 

تجدر الإشارة إلى أن المحلل يتعرف على المترجم المستخدم من قبل اسم الملف القابل للتنفيذ. إذا ظهرت لك رسالة الخطأ "لم يتم العثور على وحدات ترجمة" أثناء الاختبار ، فحاول تحديد اسم برنامج التحويل البرمجي من خلال المعلمة –compiler أو –c :
 pvs-studio-analyzer analyze -c MyCompiler 

قد تكون هناك حاجة لذلك عند التحويل البرمجي واستخدام مترجمين مع أسماء الملفات القابلة للتنفيذ غير القياسية.

بالإضافة إلى عمليات الإطلاق في وضع المراقبة ، يمكنك دمج المحلل في نظام التجميع أو IDE. يمكنك العثور على أمثلة لمشاريع ذات تكامل تم تكوينه بالفعل على GitHub في مستودع PVS_Studio:


للحصول على إرشادات أكثر تفصيلاً حول إجراء التحليل ضمن Linux ، راجع الوثائق .

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


بعد التحقق من المشروع ، يقوم المحلل بإنشاء تقرير مشفر. لتحويلها إلى أحد التنسيقات المدعومة ، استخدم الأداة المساعدة plog-Converter ، والتي يتم تثبيتها مع PVS-Studio.

تدعم الأداة التنسيقات التالية:

  • XML - تنسيق مناسب للمعالجة الإضافية لنتائج التحليل ، يدعمه البرنامج المساعد لـ SonarQube ؛
  • CSV هو تنسيق نصي لتقديم بيانات جدولية ؛
  • errorfile - تنسيق الإخراج ل gcc و clang ؛
  • قائمة المهام - تنسيق الخطأ الذي يمكن فتحه في QtCreator ؛
  • أتش تي أم أل - تقرير أتش تي أم أل مع وصف موجز لنتائج التحليل ؛
  • fullhtml - تقرير html مع فرز نتائج التحليل حسب مختلف المعلمات والتنقل من خلال شفرة المصدر.

تنسيق fullhtml هو الأكثر ملاءمة لمشاهدة التقرير ، لأنه يسمح لك بالانتقال إلى السطر المصدر الذي حدث فيه التحذير. يسمح لك الأمر التالي بتحويل تقرير المحلل إلى هذا التنسيق:

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

بعد تنفيذ الأمر ، سيتم إنشاء الدليل / المسار / report_dir ، حيث توجد ملفات التقرير.

لاحظ التبديل -a . يسمح لك بتحديد التحذيرات التي يجب تضمينها في التقرير. هذا مناسب إذا كنت بحاجة إلى تصفية إخراج المحلل. سيقوم الفريق أعلاه بإنشاء تقرير يحتوي فقط على تحذيرات من مجموعة التحليل العامة لمستويات الثقة الأولى والثانية ( عالية ومتوسطة ).

مثال التقرير:

صورة 9


بالنقر فوق خلية الموقع بالرسالة ، يمكنك الانتقال إلى سطر التعليمات البرمجية المقابل:

الصورة 8


يؤدي النقر فوق رقم التشخيص في عمود الرمز إلى فتح الوثائق التي تصف هذا التشخيص.

محلل استجابة قمع


عند التحقق من الشفرة باستخدام محلل ثابت ، تكون الإيجابيات الخاطئة أو الرسائل غير المرغوب فيها (ضوضاء) ممكنة. يوفر PVS-Studio آليات لقمع مثل هذه التحذيرات. لقمع الإنذارات بشكل فردي ، يمكنك استخدام إحدى الطرق الموضحة في قسم الوثائق " منع التنبيهات الخاطئة ".

أيضًا ، عند تحليل الشفرة القديمة ، قد يكون من الضروري منع جميع الرسائل على نطاق واسع. كقاعدة عامة ، يعد ذلك ضروريًا للتحقق من الكود الذي تمت إضافته إلى قاعدة الكود الموجودة فقط. لهذا ، يتم استخدام المعلمة قمع الأداة المساعدة pvs-studio-analys .

يمكنك منع الرسائل في تقرير جماعي باستخدام الأمر التالي:

 pvs-studio-analyzer suppress /path/to/report.log 

يتم تخزين المعلومات حول الرسائل الممنوعة في ملف suppress_base.json ، الذي يقع بجوار المشروع. يتم استبعاد هذه الرسائل من التقرير أثناء عمليات التفتيش اللاحقة.

يتم وصف هذه الآلية بمزيد من التفصيل في الوثائق هنا .

استنتاج


كانت هذه مقدمة موجزة لاستخدام محلل PVS-Studio لنظام التشغيل Linux. آمل أن يكون مفيدًا وأجاب على الأسئلة الأكثر شيوعًا. يمكنك قراءة المزيد حول موضوع المقالة في الوثائق هنا .



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

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


All Articles