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ỉ.
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
@jules: Profiler có giúp bạn tìm ra chức năng thủ phạm không? –
@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