Phát hành cppcheck 2.6, bộ phân tích mã tĩnh cho ngôn ngữ C++ và C

Phiên bản mới của bộ phân tích mã tĩnh cppcheck 2.6 đã được phát hành, cho phép bạn xác định các loại lỗi khác nhau trong mã bằng ngôn ngữ C và C++, kể cả khi sử dụng cú pháp không chuẩn, điển hình cho các hệ thống nhúng. Một bộ sưu tập các plugin được cung cấp thông qua đó cppcheck được tích hợp với các hệ thống thử nghiệm, tích hợp và phát triển khác nhau, đồng thời cung cấp các tính năng như kiểm tra việc tuân thủ mã với kiểu mã. Để phân tích mã, bạn có thể sử dụng trình phân tích cú pháp của riêng mình hoặc trình phân tích cú pháp bên ngoài từ Clang. Nó cũng bao gồm tập lệnh donate-cpu.py để cung cấp tài nguyên cục bộ nhằm thực hiện công việc cộng tác đánh giá mã cho các gói Debian. Mã nguồn của dự án được phân phối theo giấy phép GPLv3.

Sự phát triển của cppcheck tập trung vào việc xác định các vấn đề liên quan đến hành vi không xác định và việc sử dụng các thiết kế nguy hiểm theo quan điểm an toàn. Mục tiêu cũng là để giảm thiểu kết quả dương tính giả. Trong số các vấn đề được xác định: con trỏ tới các đối tượng không tồn tại, chia cho XNUMX, tràn số nguyên, thao tác dịch bit không chính xác, chuyển đổi không chính xác, sự cố khi làm việc với bộ nhớ, sử dụng STL không chính xác, hủy tham chiếu con trỏ null, sử dụng kiểm tra sau khi truy cập thực tế vào bộ đệm, lỗi tràn bộ đệm, sử dụng các biến chưa được khởi tạo.

Trong phiên bản mới:

  • Các bước kiểm tra sau đã được thêm vào lõi máy phân tích:
    • thiếu toán tử trả về trong thân hàm;
    • ghi lại dữ liệu chồng chéo, xác định hành vi không xác định;
    • giá trị được so sánh nằm ngoài biểu diễn giá trị của loại;
    • tối ưu hóa sao chép không áp dụng để return std::move(local);
    • không thể mở tệp đồng thời để đọc và ghi ở các luồng (luồng) khác nhau;
  • đối với nền tảng Unix, đã thêm hỗ trợ để hiển thị thông báo chẩn đoán bằng các màu khác nhau;
  • đã thêm phân tích biểu tượng cho ValueFlow. Sử dụng delta đơn giản khi tính hiệu giữa hai biến chưa biết;
  • các quy tắc được sử dụng cho danh sách mã thông báo "xác định" cũng có thể khớp với #include;
  • thẻ thư viện bây giờ có thể chứa một thẻ và theo đó, các hàm miễn phí có thể chấp nhận các vùng chứa như std::size, std::empty, std::begin, std::end, v.v. có thể chỉ định yeld hoặc hành động cho trình kết nối;
  • thẻ thư viện bây giờ có thể chứa một thẻ dành cho các con trỏ thông minh có quyền sở hữu duy nhất. Hiện đã có cảnh báo về việc treo các tham chiếu đến các loại con trỏ thông minh này;
  • đã khắc phục sự cố khi xử lý tham số —cppcheck-build-dir;
  • htmlreport hiện có thể hiển thị thông tin về tác giả (sử dụng git đổ lỗi);
  • cảnh báo mở rộng về các biến không cố định, nhưng có thể;
  • Các lỗi tích lũy và thiếu sót của máy phân tích đã được sửa chữa.

Ngoài ra, các bước kiểm tra từ Misra C 2012, bao gồm Bản sửa đổi 1 và Bản sửa đổi 2, đã được thực hiện đầy đủ, ngoại trừ các quy tắc 1.1, 1.2 và 17.3. Kiểm tra 1.1 và 1.2 phải được thực hiện bởi trình biên dịch. Việc xác minh 17.3 có thể được thực hiện bởi trình biên dịch như GCC.

Nguồn: opennet.ru

Thêm một lời nhận xét