2012-12-19 36 views
5

Tôi đang cố gắng sử dụng gcov trên Linux (Ubuntu) để xem tần suất thực thi cho từng dòng nguồn.gcov không hiển thị bất kỳ dữ liệu bảo hiểm nào

Tôi đã thêm cờ sau đây để trình biên dịch gcc của tôi và cờ mối liên kết,

CCFLAGS = -fprofile-arcs -ftest-coverage 
LDFLAGS = -fprofile-arcs -lgcov 

nhưng sau khi biên dịch và chạy chương trình, tôi thấy không có * .gcda tập tin được tạo ra. Kết quả là trong số đó khi tôi chạy

gcov --object-directory <path to the *.gcno/*.gcda files> myfile.cpp 

Hiển thị lỗi:

myfile.gcda:cannot open data file, assuming not executed 
File '../../../../../code/myfile.cpp' 
Lines executed:0.00% of 2625 

tôi thiếu cái gì đó. Làm thế nào để sửa lỗi này?

+0

Có phải chương trình chạy thành công để hoàn thành? –

+0

Ngoài ra, bạn sẽ nhận được gì khi chạy 'strings compiled_prog | grep gcda'? –

+0

@Shawn - Dịch vụ/daemon không trả về. Vì vậy, về cơ bản tôi phải CTRL-C thực thi trong thiết bị đầu cuối để ngăn chặn nó. Điều này có ảnh hưởng đến hành vi của gcov không. Tôi biết gprof không tạo ra dữ liệu lược tả cho các quy trình như vậy mà không thoát(). Liệu gcov có giới hạn đó quá. – goldenmean

Trả lời

4

Bạn có thể sử dụng phương thức __gcov_flush() bên trong mã của mình. Bạn sẽ cần gọi điều này từ trình xử lý tín hiệu đã đăng ký.

Xem:

https://www.osadl.org/fileadmin/dam/interface/docbook/howtos/coverage.pdf

Sử dụng này, bạn có thể giữ dịch vụ đang chạy và vấn đề của bạn "giết" bất cứ khi nào bạn cần để đổ dữ liệu bảo hiểm.

Hy vọng rằng sẽ giúp ....

0

đảm bảo gcov và gcc có cùng phiên bản :), điều này khiến nhiều người không kiểm tra.

$gcc --version 
gcc (GCC) 4.1.1 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

$ find /usr/lib/gcc -name libgcov.a 
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/32/libgcov.a 
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/libgcov.a 
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/32/libgcov.a 
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/libgcov.a 

nên phiên bản gcc bạn đã tải nên có ít nhất trong danh sách có sẵn của libgcov.a

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