2010-06-02 21 views
18

Tôi muốn sử dụng Cppcheck để phân tích mã tĩnh của mã C++ của tôi. Tôi đã học được rằng tôi có thể ngăn chặn một số cảnh báo với lệnh --inline-suppr. Tuy nhiên, tôi không thể tìm thấy cái gì "suppressed_error_id" Tôi nên đặt trong các bình luận:Làm thế nào để sử dụng tùy chọn bộ lọc triệt tiêu nội dòng của cppcheck cho mã C++?

// cppcheck-suppress "suppressed_error_id" 
+0

Dường như bạn không thể đặt dấu ngoặc kép quanh id lỗi: ví dụ: nó nên được // cppcheck-suppress noExplicitConstructor –

Trả lời

9

Theo sự giúp đỡ cppcheck:

id lỗi là id mà bạn muốn để ngăn chặn . Cách dễ nhất để có được nó là sử dụng cờ dòng lệnh --xml. Sao chép và dán chuỗi id từ đầu ra xml.

Vì vậy hãy chạy cppcheck đối với một số mã có lỗi với cờ --xml và sau đó tìm trong tệp XML được tạo để tìm tên của nó.

+0

Hey, cảm ơn cho câu trả lời nhanh chóng, tuy nhiên mẹo bạn đã làm việc cho tùy chọn --suppression đặt trong một tập tin riêng biệt. Tôi đã cố gắng để đạt được điều tương tự với ý kiến ​​chỉ trong mã của tôi, mà không có may mắn cho đến nay với việc sử dụng các id. Có lẽ, các id là OK và vấn đề nằm ở nơi khác. – Blaise

+0

@btz điều gì khiến bạn nghĩ rằng cppcheck suports đặt công tắc dòng lệnh trong các bình luận mã? –

+0

Tôi chạy ./cppcheck --help and saw --inline-suppr option: --inline-suppr Bật tính năng chặn nội tuyến. Sử dụng chúng bằng cách đặt một hoặc nhiều chú thích trong biểu mẫu: // cppcheck-suppress memleak trên các dòng trước khi cảnh báo để ngăn chặn. Đã cố gắng sử dụng nó trong mã của tôi (chạy cppcheck với --inline-suppr) với các id được lấy mẫu xml đầu ra, nhưng nó không hoạt động đối với tôi. – Blaise

18

Bạn có thể thay đổi mẫu đầu ra để hiển thị id lỗi từ dòng lệnh, điều này khá gọn gàng.

Đối với một Visual đầu ra định dạng Studio với id lỗi hiển thị, thêm video này vào dòng lệnh của bạn:

--template "{file}({line}): {severity} ({id}): {message}" 

Điều này sẽ tạo ra một cái gì đó như thế này:

s:\src\jpeg.cpp(123): error (bufferAccessOutOfBounds): Buffer access out-of-bounds: abRY 

nào thì bạn có thể ngăn chặn bởi thêm dòng:

// cppcheck-suppress bufferAccessOutOfBounds 

Dòng trước đó trong tệp nguồn.

3

Theo số cppcheck man page, bạn có thể sử dụng tùy chọn --template để thay đổi kết quả mặc định để bao gồm id, ví dụ:

cppcheck /the/src/file --template='{file}:{line},{severity},{id},{message}' 
0

Nếu bạn đang sử dụng GUI, bạn có thể nhấp chuột phải vào thư bạn muốn chặn để bật menu. Chọn "Sao chép id tin nhắn". Dán id tin nhắn vào mã của bạn thay cho "suppressed_error_id".

+2

Hi, bạn có thể mô tả chi tiết hơn những gì bạn đang đề cập đến GUI? – Blaise

+0

Sử dụng lệnh "Ẩn tất cả với id", có sẵn trong 1.76.1. – Liviu

Các vấn đề liên quan