Theo như tôi biết, dữ liệu đo đạc GCOV chỉ cho biết một số điểm trong mã là được thực thi (và có thể bao nhiêu lần). Nhưng không có mối quan hệ giữa các điểm mã được thiết lập.
Có vẻ như những gì bạn muốn là xác định đường dẫn thông qua mã. Để làm điều đó, bạn cần phân tích tĩnh mã (yêu cầu trình phân tích cú pháp C đầy đủ, trình phân giải tên, trình phân tích luồng), hoặc bạn cần ghép nối các điểm thiết bị động theo thứ tự thực hiện.
Việc đầu tiên yêu cầu bạn tìm thấy máy móc có khả năng xử lý C trong tất cả các vinh quang của nó; bạn không muốn lặp lại điều đó. GCC, Clang, Bộ công cụ DMS của chúng tôi là sự lựa chọn. Tôi biết GCC và Clang thực hiện phân tích khá nghiêm túc; Tôi khá chắc chắn bạn có thể tìm thấy ít nhất phân tích dòng chảy kiểm soát intraprocedural; Tôi biết rằng DMS có thể làm điều này. Bạn sẽ phải tùy chỉnh GCC và Clang để trích xuất dữ liệu này. Bạn sẽ phải cấu hình DMS để trích xuất dữ liệu này; cấu hình dễ dàng hơn tùy biến vì nó là thuộc tính thiết kế chứ không phải là hành động "tùy chỉnh". YMMV.
Sau đó, sử dụng dữ liệu GCOV, bạn có thể xác định luồng giữa các điểm dữ liệu GCOV. Nó không phải là rõ ràng với tôi rằng điều này mua cho bạn bất cứ điều gì vượt ra ngoài những gì bạn đã nhận được chỉ là phân tích dòng điều khiển tĩnh, trừ khi mục tiêu của bạn là để triển lãm dấu vết thực hiện.
Để làm điều này một cách năng động, những gì bạn có thể làm là bắt buộc mỗi điểm thu thập dữ liệu trong mã được công cụ để lưu ý rằng đó là điểm gần đây nhất gặp phải; trước khi làm điều đó, nó sẽ ghi lại điểm gần đây nhất gặp phải trước đó. Điều này sẽ tạo ra một chuỗi các tham chiếu giữa các điểm phù hợp với luồng điều khiển. Điều này có hai vấn đề từ quan điểm của bạn, tôi nghĩ: a) bạn phải sửa đổi GCOV hoặc một số công cụ khác để chèn loại thiết bị khác này, b) bạn phải lo lắng về điều gì và cách bạn ghi lại "người tiền nhiệm" khi một điểm thu thập dữ liệu bị tấn công nhiều lần.
Nguồn
2014-04-19 20:51:02