2009-05-08 37 views
21

Gần đây tôi đã bắt đầu sử dụng lcov để hình dung phạm vi mã của tôi. Đó là một công cụ tuyệt vời.Có cách nào để tập trung các báo cáo bảo hiểm mã lcov vào chỉ một hoặc hai thư mục không?

Một điều tôi nhận thấy là nó tạo ra các báo cáo bảo hiểm mã cho tất cả các tệp tôi đang sử dụng - bao gồm cả những tệp tôi không quan tâm. Ví dụ: nó sẽ cung cấp cho tôi tệp mysql ++.

Có cách nào dễ dàng để buộc lcov chỉ tạo báo cáo bảo hiểm cho các tệp cụ thể không?

Tôi đã thử bằng cách sử dụng tham số -k như vậy: (. Nghĩa là tôi chỉ muốn tập tin bảo hiểm cho "bao gồm" và thư mục "src")

 
/usr/bin/lcov -q -c -i -b . -d .obj -k src/ -k include/ -o app_base.info 

{run unit tests now} 

/usr/bin/lcov -q -c -b . -d .obj -k src/ -k include/ -o app_test.info 
/usr/bin/lcov -q -a app_base.info -a app_test.info -o app_total.info 
/usr/bin/genhtml -q -o lcov_output_directory app_total.info 

Tuy nhiên, doesn này dường như không hoạt động. Báo cáo vẫn hiển thị cho tôi tất cả các tệp không liên quan. Bất kỳ đề xuất được đánh giá rất nhiều. Cảm ơn!

Trả lời

25

lcov hỗ trợ đối số dòng lệnh --remove để thực hiện chính xác những gì bạn đang yêu cầu.

+9

Lệnh 'tùy chọn --extract' có thể hữu ích hơn. Tạo ra tracefile với tất cả mọi thứ, và sau đó giải nén ra chỉ là các thư mục mà bạn quan tâm vào một tracefile thứ hai. – Dan

+1

Hãy xem [trang này] (http://qiaomuf.wordpress.com/2011/05/26/use-gcov-and-lcov-to-know-your-test-coverage/) có rất hữu ích ví dụ về việc sử dụng --remove. –

2

Một cách tiếp cận có thể là hạn chế tệp nào được biên dịch với cờ bảo hiểm (-fprofile-arcs -ftest-coverage). Nếu bạn không muốn thiết kế hệ thống tệp của mình để chọn lọc về những tệp được tạo bằng công cụ thử nghiệm, mẹo sau đây có thể phù hợp với bạn:

  • Tạo ứng dụng của bạn mà không cần thiết bị đo đạc.
  • Xóa các tệp .o cho nguồn mà bạn muốn công cụ
  • Bật thiết bị và xây dựng lại. Chỉ các tập tin đối tượng đã xóa sẽ được xây dựng lại với thiết bị đo đạc.
  • Run lcov

này nên kết quả chỉ trong các lĩnh vực mục tiêu phát hiện vật gcov, được một cách mù quáng được tiêu thụ bởi các kịch bản lcov.

27

Tôi đã sử dụng cờ --no-external cùng với --directory để loại trừ các tệp không mong muốn.

Định nghĩa của bên ngoài từ người đàn ông:

file nguồn bên ngoài là các tập tin mà không được nằm ở một trong các thư mục theo quy định của --directory hoặc --base thư mục.

Vì vậy, lệnh của tôi trông như thế này:

$ lcov --directory src -c -o report.info --no-external 
Capturing coverage data from src 
Found gcov version: 4.2.1 
Scanning src for .gcda files ... 
Found 4 data files in src 
Processing src/C####.gcda 
    ignoring data for external file /usr/include/c++/4.2.1/bits/allocator.h 
+0

Đó là trong 'lcov' 1.10, không? – jackyalcine

+0

Phải, nó được thêm vào trong 1,10, xem: http://ltp.sourceforge.net/coverage/lcov/changes.php – peetasan

+0

Vâng, hút cho người dùng Ubuntu, nó không có trong kho cho 'raring' hoặc' saucy'. Tôi đã sử dụng phương pháp '--extract' nhưng điều này sẽ làm cho cuộc sống dễ dàng hơn nhiều. – jackyalcine

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