2012-02-14 36 views
17

Tôi cần biểu đồ cuộc gọi động cho ứng dụng của mình. Tôi chạy nó với công cụ callgrind (valgrind bộ) và có callgrind.out.xxxxx tệp. Bây giờ, tôi muốn thực hiện một đại diện đồ họa của dữ liệu này. KCacheGrind không giúp tôi nhiều vì nó vẽ một phần giới hạn của biểu đồ (vẽ ~ 50 hàm thay vì ~ 1500 profiled và tôi không biết cách sửa lỗi đó). Làm thế nào tôi có thể có được một hình ảnh đồ thị, nơi tất cả các chức năng sẽ được rút ra?Thông dịch dữ liệu cuộc gọi

+0

Liệu callgrind.out chứa dữ liệu mà còn thiếu trong đồ thị? Ngoài ra, nếu bạn sắp xếp theo "tự", có thời gian/hướng dẫn phù hợp còn lại được chi tiêu trong các chức năng không được liệt kê không? Tôi không thể nhớ một trường hợp các bộ phận liên quan bị bỏ sót. –

+0

Có, callgrind.out chứa tất cả dữ liệu tôi cần (bao gồm các hàm bị thiếu trong biểu đồ) và hầu hết các hàm không được liệt kê trong biểu đồ có thời gian/hướng dẫn phù hợp. Không biết tại sao 'KCacheGrind' chỉ vẽ một phần của nó. UPD: nếu tôi chọn hàm tôi muốn trong danh sách các hàm (được đặt ở bên trái theo mặc định 'KCacheGrind' layout) thì đồ thị sẽ được vẽ lại để hiển thị các hàm này, nhưng vẫn thiếu các hàm khác. Tôi cần toàn bộ đồ thị cùng một lúc. Cảm ơn trước. – maverik

Trả lời

22

Ok, tôi đã tìm được đường. Tệp callgrind.out được tạo mà bạn có thể chuyển đổi thành dot tệp bằng cách sử dụng gprof2dot (có, công cụ này cũng có thể phân tích các tệp callgrind). Và sau đó bạn có thể nhận được hình ảnh biểu đồ sử dụng dot -T<type> dotfile.dot -o graphfile.<type>

+0

Thú vị. Biểu đồ được tạo có thể đọc được cho 1500 chức năng không? –

+0

Thỏa thuận là thực sự tôi cần so sánh hai đồ thị từ hai phiên bản phần mềm khác nhau, vì vậy không có mục đích đọc/hiểu toàn bộ biểu đồ, tôi chỉ cần một số đường dẫn và tôi biết mình nên tìm ở đâu. OTOH, hình ảnh 'png' thế hệ mất khoảng 5 phút trên' Core i7-2600 3.4GHz/8 Gb DDR3' của tôi, kích thước của tập tin kết quả là 23 MByte. Không phải tất cả người xem hình ảnh đều có thể xử lý nhanh và chính xác (IMO căng thẳng hoàn hảo :)) – maverik

+0

chúng tôi có thể thực sự nhập vào '-T '? hoặc chúng ta thay thế '' bằng một cái gì đó? – nmz787

16

Sử dụng lệnh sau để tạo graph.png sử dụng gprof2dot

$./gprof2dot.py --format=callgrind --output=out.dot /tmp/cachegrind.out.1360843301.16101 

$dot -Tpng out.dot -o graph.png 
Các vấn đề liên quan