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
Trả lời
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>
Thú vị. Biểu đồ được tạo có thể đọc được cho 1500 chức năng không? –
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
chúng tôi có thể thực sự nhập vào '-T
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
- 1. Diện tích dữ liệu thông qua một cuộc gọi hệ thống là quá nhỏ"
- 2. Cuộc gọi liên tiếp để recvfrom() mất dữ liệu?
- 3. Cuộc gọi dịch vụ web từ Jenkins
- 4. Dữ liệu biến trong cuộc gọi ajax JQUERY
- 5. Giao dịch PDO và các cuộc gọi chức năng
- 6. Cài đặt CultureInfo về các cuộc gọi dịch vụ wcf?
- 7. jquery Cuộc gọi Ajax - các thông số dữ liệu không được chuyển đến hành động của Bộ điều khiển MVC
- 8. Đăng nhập Cuộc gọi dịch vụ WCF với thông số tham số
- 9. Cuộc gọi dịch vụ đồng bộ trong Android
- 10. Cách thích hợp để lưu dữ liệu từ cuộc gọi API với nodejs
- 11. Làm cách nào để thêm (các) trường và bản ghi mới vào cơ sở dữ liệu nhật ký cuộc gọi (lịch sử cuộc gọi)?
- 12. Cấu trúc dữ liệu nào trong .NET làm O (1) trên các cuộc gọi Chứa()?
- 13. Thêm dữ liệu bổ sung cho cuộc gọi ajax của tùy chọn từ xa typeahead.js
- 14. Sử dụng thời gian chờ ruby trong chuỗi tạo một cuộc gọi cơ sở dữ liệu
- 15. Dịch vụ RIA và ADO.NET Dịch vụ dữ liệu
- 16. Vấn đề Java SerialPortEvent: DATA_AVAILABLE cuộc gọi nhanh hơn sau đó dữ liệu đến
- 17. Cuộc gọi jQuery ajax tới dịch vụ REST
- 18. Nhận nội dung: AJAX và cuộc gọi HTTP "thông thường"
- 19. Hủy cuộc gọi Socket.xxxxAsync
- 20. OOP - Nơi đặt các cuộc gọi đến Lớp Truy cập Dữ liệu?
- 21. Python cProfile: cách lọc ra các cuộc gọi cụ thể từ dữ liệu lược tả?
- 22. dữ liệu-từ xa đúng xác định một cuộc gọi lại
- 23. Làm cách nào để lưu trữ dữ liệu nhận được từ cuộc gọi Ajax?
- 24. Dữ liệu MySQL - Đếm số cuộc gọi điện thoại cùng một lúc
- 25. Jquery: cuộc gọi Ajax để servlet và nhận dữ liệu như json
- 26. Cách trả dữ liệu từ PHP sang cuộc gọi ajax của jQuery
- 27. Thực hiện cuộc gọi HTTP POST với nhiều dữ liệu/biểu mẫu bằng jQuery?
- 28. Tiêm dữ liệu vào dịch vụ WCF
- 29. Android: Truy vấn Nhật ký Cuộc gọi Sau khi Cuộc gọi Kết thúc
- 30. Threading nhiều cuộc gọi không đồng bộ
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. –
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