انتشار cppcheck 2.6، یک تحلیلگر کد استاتیک برای زبان های C++ و C

نسخه جدیدی از تحلیلگر کد استاتیک cppcheck 2.6 منتشر شده است که به شما امکان می دهد کلاس های مختلفی از خطاهای کد را در زبان های C و C++ شناسایی کنید، از جمله هنگام استفاده از نحو غیر استاندارد، معمولی برای سیستم های جاسازی شده. مجموعه ای از پلاگین ها ارائه شده است که از طریق آن cppcheck با سیستم های مختلف توسعه، یکپارچه سازی و آزمایش مداوم یکپارچه می شود و همچنین ویژگی هایی مانند بررسی تطابق کد با سبک کد را ارائه می دهد. برای تجزیه کد، می توانید از تجزیه کننده خود یا تجزیه کننده خارجی Clang استفاده کنید. همچنین شامل اسکریپت donate-cpu.py برای ارائه منابع محلی برای انجام کار بررسی کد مشترک برای بسته‌های دبیان است. کد منبع پروژه تحت مجوز GPLv3 توزیع شده است.

توسعه cppcheck بر شناسایی مشکلات مرتبط با رفتار نامشخص و استفاده از طرح هایی که از نقطه نظر ایمنی خطرناک هستند متمرکز است. هدف نیز به حداقل رساندن موارد مثبت کاذب است. از جمله مشکلات شناسایی شده: اشاره گر به اشیاء ناموجود، تقسیم بر صفر، سرریز اعداد صحیح، عملیات تغییر بیت نادرست، تبدیل های نادرست، مشکلات هنگام کار با حافظه، استفاده نادرست از STL، عدم ارجاع اشاره گر تهی، استفاده از بررسی ها پس از دسترسی واقعی به بافر، بیش از حد بافر، استفاده از متغیرهای اولیه.

در نسخه های جدید:

  • بررسی های زیر به هسته آنالیزور اضافه شده است:
    • عدم وجود عملگر بازگشتی در بدنه تابع؛
    • داده های همپوشانی را ثبت می کند، رفتار نامشخص را تعیین می کند.
    • ارزش مقایسه شده خارج از نمایش ارزش نوع است.
    • بهینه سازی کپی برای return std::move(local);
    • فایل را نمی توان به طور همزمان برای خواندن و نوشتن در جریان های مختلف باز کرد.
  • برای پلتفرم های یونیکس، پشتیبانی برای نمایش پیام های تشخیصی در رنگ های مختلف اضافه شده است.
  • تجزیه و تحلیل نمادین برای ValueFlow اضافه شده است. هنگام محاسبه تفاوت بین دو متغیر ناشناخته از دلتای ساده استفاده می کند.
  • قوانین استفاده شده برای لیست نشانه‌های "تعریف" نیز می‌توانند مطابق با #include;
  • برچسب کتابخانه اکنون می تواند حاوی یک برچسب باشد و بر این اساس توابع رایگان که می توانند کانتینرهایی مانند std::size، std::empty، std::begin، std::end و غیره را بپذیرند. می تواند yeld یا action را برای کانکتورها مشخص کند.
  • برچسب کتابخانه اکنون می تواند حاوی یک برچسب باشد برای اشاره گرهای هوشمندی که مالکیت منحصر به فرد دارند. اکنون هشداری در مورد ارجاعات آویزان به این نوع نشانگرهای هوشمند صادر شده است.
  • رفع مشکلات مربوط به پردازش پارامتر —cppcheck-build-dir.
  • htmlreport اکنون می تواند اطلاعات مربوط به نویسنده را نمایش دهد (با استفاده از git blame).
  • هشدارهای گسترده در مورد متغیرهایی که ثابت نیستند، اما می توانند باشند.
  • خطاها و نواقص انباشته آنالیزور اصلاح شده است.

علاوه بر این، بررسی های Misra C 2012، شامل اصلاحیه 1 و اصلاحیه 2، به جز قوانین 1.1، 1.2 و 17.3 به طور کامل اجرا شده است. بررسی های 1.1 و 1.2 باید توسط کامپایلر انجام شود. تایید 17.3 را می توان توسط کامپایلری مانند GCC انجام داد.

منبع: opennet.ru

اضافه کردن نظر