2009-02-10 35 views
7

Hiện tại chúng tôi sử dụng gcov với bộ thử nghiệm của chúng tôi cho ứng dụng Linux C++ và nó thực hiện công việc tốt khi đo lường mức độ phù hợp.Có thể đo độ bao phủ chức năng bằng gcov không?

Gcov có thể tạo báo cáo phạm vi chức năng/phương pháp ngoài phạm vi phủ sóng không?

Nhìn vào các tham số gcov chấp nhận tôi không nghĩ rằng nó là có thể, nhưng tôi có thể thiếu một cái gì đó. Hoặc, có lẽ, có công cụ nào khác có thể tạo báo cáo phạm vi chức năng/phương pháp trong số các thống kê được tạo bởi gcc không?

Cập nhật: Bằng chức năng/phương pháp phủ sóng Tôi có nghĩa là phần trăm các hàm được thực hiện trong khi kiểm tra.

Trả lời

6

Tôi đoán ý bạn là tùy chọn -f, tùy chọn này sẽ cung cấp cho bạn tỷ lệ phần trăm các dòng được bao phủ cho mỗi chức năng. Có một bài viết thú vị về gcov tại Dr. Dobb's có thể hữu ích. Nếu "man gcov" không hiển thị cờ -f, hãy kiểm tra xem bạn có phiên bản mới nhất của bộ gcc hay không.

Chỉnh sửa: để nhận phần trăm chức năng không được thực thi, bạn có thể phân tích cú pháp thông qua đầu ra phạm vi chức năng, vì độ bao phủ 0,00% tương đương với không được gọi. Tập lệnh nhỏ này in tỷ lệ phần trăm các hàm không được thực hiện:

#!/bin/bash 

if test -z "$1" 
then 
    echo "First argument must be function coverage file" 
else 
    notExecuted=`cat $1 | grep "^0.00%" | wc -l` 
    executed=`cat $1 | grep -v "^0.00%" | wc -l` 

    percentage=$(echo "scale=2; $notExecuted/($notExecuted + $executed) * 100" |bc) 

    echo $percentage 
fi 
+0

-f tùy chọn không chính xác những gì tôi muốn. Nó cung cấp độ bao phủ theo hàm, nhưng tôi muốn phủ sóng hàm/phương thức. Tôi đã làm rõ thêm câu hỏi. –

6

Chúng tôi đã bắt đầu sử dụng gcov và lcov cùng nhau. Các kết quả từ lcov bao gồm phần trăm các hàm được thực hiện cho "mô-đun" mà bạn đang xem xét.

EDIT: Mô-đun có thể chuyển từ thư mục xuống tệp.

Tôi cũng muốn thêm rằng nếu bạn đang sử dụng các công cụ trình biên dịch GNU, thì gcov/lcov sẽ không quá khó khăn để bạn có thể chạy và kết quả nó tạo ra rất ấn tượng.

5

Tiện ích lcov rất đẹp và chúng tôi sử dụng nó. Nhưng tôi không chắc chắn nếu bạn cần nó cho những gì bạn muốn.

Chúng tôi

  1. Sử dụng ctags (wikipedia; sourceforge) để tìm tất cả các chức năng khai báo trong tập tin tiêu đề có liên quan.

  2. Chạy GCOV để nhận phạm vi phủ sóng cho mọi chức năng trong tệp nhị phân.

  3. So sánh danh sách hàm từ 1 & 2 để tạo "Hàm được gọi"/"Chức năng khả dụng".

Chúng tôi gọi nó là "phủ sóng API" vì chúng tôi chỉ áp dụng bướC# 1 cho các tiêu đề API công khai. Nhưng bạn có thể làm điều đó trên tất cả các tiêu đề hoặc chỉ một tập hợp con khi bạn chọn. Tôi nghĩ tỷ lệ chúng tôi sản xuất theo cách này là tỷ lệ bạn đang tìm kiếm.

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