2016-10-28 13 views
10

Tôi muốn lập hồ sơ cho mã của mình. Vì vậy, tôi làm:Kcachegrind. Chỉ hiển thị các chức năng từ mã của tôi

valgrind --tool=callgrind my_program [programm arguments] 
kcachegrind callgrind.out.x 

Bây giờ tôi có kcachegrind cửa sổ như thế này:

enter image description here

Có rất nhiều các chức năng cốt lõi và thư viện, nhưng làm thế nào tôi có thể thiết lập valgrind hoặc kcachegrind để theo dõi chỉ chức năng là trong mã của tôi (trong đó, tất nhiên, gọi chức năng thư viện)?

Sản lượng dự kiến ​​là một cái gì đó như thế:

time number of calls   function_name() 
    4,52% 569854   CSim2Sim my_function1(int argc, char* argv[]) 
    3,52% 452158   CSim2Sim my_function2(int argc, char* argv[]) 
    3,52% 36569   CSim2Sim my_function3(int argc, char* argv[]) 
    1,52% 1258   CSim2Sim my_function4(int argc, char* argv[]) 
+0

Bạn không thể nhấp vào tab "Vị trí" để có tất cả các chức năng của bạn được nhóm? Lưu ý bổ sung: Bạn có thể thực hiện việc này bằng cách sử dụng trình thu thập cuộc gọi của Qt Creator. – Asu

+0

@Asu Có, tôi đã làm điều đó, nhưng nhóm mã nguồn cũng bao gồm các tệp từ thư viện và bao gồm các tệp (mà tôi không muốn xem) –

Trả lời

0

khi bạn đang ở trên os x bạn có thể thử profilingviewer, nó có thể ẩn chức năng hệ thống dựa trên cài đặt trước tùy chỉnh.

enter image description here

+0

Tôi là người dùng ubuntu = ( –

2

Valgrind cung cấp cơ sở để ngăn chặn lỗi cụ thể hoặc lỗi từ tập tin đối tượng cụ thể hoặc từ một số thư viện. Kiểm tra số link này.

Theo hướng dẫn này bạn có thể chuẩn bị cho bạn suppresion tập tin (như a.supp) và vượt qua nó để valgrind

valgrind --tool = callgrind --suppressions =/path/to/a.supp my_program [đối số lập trình]

Tôi chưa sử dụng kcachegrind, nhưng tôi chắc chắn nó phải cung cấp một số cơ sở để thay đổi tùy chọn dòng lệnh của valgrind.

1

Điều gần nhất với nội dung bạn đang tìm kiếm có thể là nhóm. Trong Thanh công cụ: Xem -> Nhóm. Sau đó bạn có thể chọn một trong hai tệp Nguồn hoặc mỗi đối tượng ELF. Trước đây sẽ cung cấp cho bạn danh sách các tệp nguồn, nơi bạn có thể chọn tệp bạn đã viết, sau này sẽ cung cấp cho bạn danh sách đối tượng, chủ yếu là thư viện và đối tượng có tên tệp thực thi của bạn: chọn nó và bạn chỉ nên xem danh sách các cuộc gọi được thực hiện trong mã nguồn của bạn.

3

Chuyển đến Chế độ xem -> Nhóm và chọn Đối tượng ELF. Trong toolview tương ứng, chọn đối tượng ELF của ứng dụng/thư viện của bạn và nó sẽ chỉ hiển thị các hàm bên trong chúng.

Bạn sẽ không thể nhận được kết quả mong muốn. Bạn không thể đo thời gian với Valgrind, nó chỉ đếm các hướng dẫn và có thể ước tính số lượng chu kỳ và bộ nhớ cache bị mất. Và callgrind cũng không cho bạn thấy chữ ký đầy đủ chức năng, nó sẽ luôn luôn bỏ các đối số và chỉ hiển thị tên hàm.

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