2011-10-13 25 views
6

Chương trình C++ của tôi đang tiêu tốn rất nhiều CPU, và nhiều hơn thế nữa khi nó chạy. Tôi đã sử dụng Công cụ hiệu suất của Google để sử dụng hồ sơ CPU và đây là những gì tôi nhận được:Cách diễn giải địa chỉ trong các công cụ hoàn thiện của Google Biên tập CPU

(pprof) top 
Total: 1343 samples 
    1330 99.0% 99.0%  1330 99.0% 0x0000000801dcb11c 
     7 0.5% 99.6%  7 0.5% 0x0000000801dcb11e 
     4 0.3% 99.9%  4 0.3% program::threadWorker 
     1 0.1% 99.9%  1 0.1% 0x0000000801dcb110 
     1 0.1% 100.0%  1 0.1% 0x00007fffffffffc0 

Tuy nhiên, chỉ 1 trong 5 quy trình được hiển thị ở đây là tên hàm thực tế; phần còn lại là địa chỉ. Làm thế nào tôi có thể tìm ra những địa chỉ này liên quan đến những gì? (Tất nhiên, tôi quan tâm nhất trong địa chỉ đầu tiên trình bày ở trên)

Edit: Đây là cách tôi chạy các hồ sơ:

env CPUPROFILE=prof.out ./a.out 
[kill program] 

pprof ./a.out prof.out 

Ngoài ra, tôi tìm thấy nguyên nhân gốc rễ qua sự kiểm tra mã. Nhưng nó vẫn sẽ được tốt đẹp để có profiler xác định chức năng thủ phạm chứ không phải là một địa chỉ.

Trả lời

2

Có thể bạn chưa chỉ định tệp thực thi khi tải kết quả trong google-pprof không?

tôi chạy nó như:

$ google-pprof executable /tmp/executable.hprof --text | less 

và có thể xem tên hàm tốt. Hoặc rằng những phương pháp đó nằm trong một số thư viện được chia sẻ không có trong đường dẫn của bạn khi bạn chạy google-pprof?

+0

Tôi đã chỉnh sửa câu hỏi của mình để bao gồm cách tôi chạy hồ sơ. Tôi đã tìm thấy hàm thủ phạm, được khai báo trong cùng một tệp chứ không phải từ thư viện được chia sẻ. – jules

+0

@jules: Profiler có giúp bạn tìm ra chức năng thủ phạm không? –

+0

@Mike Dunlavey: không, tôi đã tìm thấy nó bằng cách kiểm tra mã bởi vì chương trình của tôi khá nhỏ. – jules

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