اختيار أداة تحليل التعليمات البرمجية الثابتة [مغلق]

StackOverflow https://stackoverflow.com/questions/2873

  •  08-06-2019
  •  | 
  •  

سؤال

أنا أعمل في مشروع حيث أقوم بالترميز بلغة C في بيئة UNIX.لقد كنت أستخدم أداة الوبر للتحقق من كود المصدر الخاص بي.لقد كان Lint موجودًا منذ فترة طويلة (منذ عام 1979)، فهل يمكن لأي شخص أن يقترح أداة تحليل كود أحدث يمكنني استخدامها؟ويفضل أن تكون أداة مجانية.

هل كانت مفيدة؟

المحلول

لا تتجاهل المترجم نفسه.

اقرأ وثائق المترجم وابحث عن جميع التحذيرات والأخطاء التي يمكن أن يقدمها، ثم قم بتمكين أكبر عدد ممكن من التحذيرات والأخطاء التي تناسبك.

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

أيضًا:"-Wall" على دول مجلس التعاون الخليجي يفعل ذلك لا تمكين كافة التحذيرات، لا ينخدع.

كما أيضا:تحقق من valgrind (مجاني!) - فهو "يكتشف تلقائيًا العديد من أخطاء إدارة الذاكرة والترابط، ويحدد ملف تعريف برامجك بالتفصيل."

Valgrind ليس فاحصًا ثابتًا، ولكنه أداة رائعة! http://valgrind.org

نصائح أخرى

بالنسبة لرمز C، يجب عليك بالتأكيد استخدامه فليكسلينت.لقد استخدمته منذ ما يقرب من 15 عامًا وأقسم به.إحدى الميزات الرائعة حقًا هي أنه يمكن إيقاف تشغيل التحذيرات وتشغيلها بشكل انتقائي عبر التعليقات في الكود ("/* lint -e123*/").وقد تبين أن هذه أداة توثيق قوية عندما تريد شيئًا خارجًا عن المألوف."لقد قمت بإيقاف تشغيل التحذير X، وبالتالي، هناك سبب وجيه لفعل X."

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

لقد سمعت أشياء جيدة عنه رنة محلل ثابت, ، والتي تستخدم IIRC LLVM كواجهة خلفية لها.إذا تم تنفيذ ذلك على النظام الأساسي الخاص بك، فقد يكون هذا اختيارًا جيدًا.

من ما أفهمه، فإنه يفعل أكثر قليلا من مجرد تحليل بناء الجملة."الاكتشاف التلقائي للأخطاء"، على سبيل المثال.

لقد تم استخدام منع التغطية للتحقق من كود مصدر C++.

إنها ليست أداة مجانية (على الرغم من أنني أعتقد أنها توفر فحصًا مجانيًا للمشاريع مفتوحة المصدر)، ولكنها واحدة من أفضل أدوات التحليل الثابت التي ستجدها.لقد سمعت أنه أكثر إثارة للإعجاب على لغة C منه على لغة C++، ولكنه ساعدنا على تجنب عدد لا بأس به من الأخطاء حتى الآن.

لقد قمت مؤخرًا بتجميع قائمة بجميع أدوات التحليل الثابتة التي كانت تحت تصرفي، وما زلت في طور تقييمها جميعًا.لاحظ أن هذه في الغالب أدوات تحليل الأمان.

يمكنك استخدام com.cppcheck.إنها أداة سهلة الاستخدام لتحليل التعليمات البرمجية الثابتة.
على سبيل المثال:
cppcheck --enable=all .
سوف يتحقق من كافة ملفات C/C++ ضمن المجلد الحالي.

تعاني الأدوات الشبيهة بالوبر عمومًا من مشكلة "الإنذار الكاذب":إنهم يبلغون عن مشكلات أكثر بكثير مما هو موجود بالفعل.إذا كانت نسبة التحذيرات المفيدة حقًا منخفضة للغاية، فسيتعلم المستخدم تجاهل الأداة فحسب.تبذل الأدوات الأكثر حداثة بعض الجهد للتركيز على التحذيرات الأكثر احتمالاً/إثارة للاهتمام.

PC-لينت/Flexelint هي أدوات تحليل ثابتة قوية ومفيدة للغاية، وقابلة للتكوين بدرجة كبيرة، على الرغم من أنها ليست مجانية للأسف.

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

مع الاستخدام المستمر مثل هذا، ستتعلم قريبًا كيفية كتابة التعليمات البرمجية الخاصة بك بطريقة تتوافق مع القواعد التي تطبقها الأداة.

ولهذا السبب، أفضّل أدوات مثل Lint التي تعمل بسرعة نسبيًا، وبالتالي تشجع على الاستخدام المستمر، بدلاً من الأدوات الأكثر تعقيدًا والتي قد ينتهي بك الأمر إلى استخدامها بشكل أقل، هذا إن استخدمتها على الإطلاق.

يمكنك المحاولة CppDepend, ، وهو محلل ثابت كامل ومتاح على نظامي التشغيل Windows وLinux، من خلال VS Plugin أو IDE أو سطر الأوامر، وهو مجاني لـ المساهمين مفتوحة المصدر

قد تجد أداة أونو مفيد.إنه أحد الخيارات القليلة المجانية غير المخصصة للألعاب.إنه يختلف عن الوبر، Flexelint، إلخ.في التركيز على عدد صغير من الأخطاء "الدلالية" (مؤشرات فارغة، ومؤشرات مصفوفة خارج الحدود، واستخدام متغيرات غير مهيأة).كما يسمح أيضًا بإجراء عمليات فحص محددة من قبل المستخدم، مثل نظام القفل والفتح.

أنا أعمل على إصدار عام للأداة اللاحقة، أوريون (المحتوى غير متوفر بعد الآن)

يوجد خيار "-Weffc++" لـ gcc والذي وفقًا لصفحة دليل Mac OS X سوف:

تحذير بشأن انتهاكات إرشادات الأسلوب التالية من كتاب Scott Meyers الفعال C++:

[قص]

أعلم أنك سألت عن C، ولكن هذا هو أقرب ما أعرفه.

الوبر يتم تحديثه باستمرار...فلماذا تريد واحدة أحدث.

راجع للشغل فليكسيلينت يكون الوبر

يوم سعيد،

أنا أتفق تمامًا مع الاقتراحات الخاصة بقراءة واستيعاب ما يخبرك به المترجم بعد ضبط -Wall.

أداة تحليل ثابتة جيدة للأمان هي FlawFinder كتبه ديفيد ويلر.إنه يقوم بعمل جيد في البحث عن مآثر أمنية مختلفة،

ومع ذلك، فإنه لا يحل محل وجود شخص مطلع يقرأ التعليمات البرمجية الخاصة بك.وكما يقول ديفيد على صفحته على الإنترنت، "الأحمق الذي يحمل أداة يظل أحمقًا!"

هتافات،

روب

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

هناك بعض المناقشات الجيدة في بعض المحادثات هنا.إنها من مؤتمر عقدته وزارة الأمن الداخلي الأمريكية حول التحليل الثابت.

متناثر هي أداة برمجية حاسوبية، متوفرة بالفعل على نظام Linux، مصممة للعثور على أخطاء الترميز المحتملة في Linux kernel.

هناك نوعان من المشاريع النشطة ل مركز التحقق لينكس تهدف إلى تحسين جودة وحدات النواة القابلة للتحميل.

  1. التحقق من برنامج تشغيل Linux (LDV) - مجموعة أدوات شاملة للتحقق من كود المصدر الثابت لبرامج تشغيل أجهزة Linux.
  2. إطار عمل KEDR - إطار عمل قابل للتوسيع للتحليل الديناميكي والتحقق من وحدات النواة.
  3. مشروع آخر مستمر هو التحقق من نظام ملفات Linux الذي يهدف إلى تطوير مجموعة أدوات مخصصة للتحقق من تطبيقات نظام ملفات Linux.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top