Tôi đang cố gắng lập hồ sơ một số chương trình C++ trên MacOSX. Vì vậy, tôi đã xây dựng google-perftools
, đã viết một chương trình, được biên dịch bằng MacPorts g ++ 4.7, với cờ biên dịch -g
và được liên kết với libprofiler
. Sau đó, tôi chạy:Số dòng trong lược tả CPU của Google Perftools trên MacOSX
CPUPROFILE=cpu.profile ./a.out
Sau đó, tôi chạy pprof để tạo ra kết quả:
[hidden ~]$ pprof --text ./a.out cpu.profile
Using local file ./a.out.
Using local file cpu.profile.
Removing __sigtramp from all stack traces.
Total: 282 samples
107 37.9% 37.9% 107 37.9% 0x000000010d72229e
16 5.7% 43.6% 16 5.7% 0x000000010d721a5f
12 4.3% 47.9% 12 4.3% 0x000000010d721de8
11 3.9% 51.8% 11 3.9% 0x000000010d721a4e
9 3.2% 55.0% 9 3.2% 0x000000010d721e13
8 2.8% 57.8% 8 2.8% 0x000000010d721a64
7 2.5% 60.3% 7 2.5% 0x000000010d7222f0
6 2.1% 62.4% 6 2.1% 0x000000010d721a4c
6 2.1% 64.5% 6 2.1% 0x000000010d721b1f
6 2.1% 66.7% 6 2.1% 0x000000010d721e0c
5 1.8% 68.4% 5 1.8% 0x000000010d721fba
......
Dường như perftools không chuyển đổi các địa chỉ thực hiện chức năng tên.
Có ai biết tôi thiếu gì ở đây không? Tôi nên làm gì để cho profiler tạo ra kết quả chính xác.
EDIT: Thông tin khác: nó không phải là vấn đề của pprof hoặc google-perftools, nhưng nhiều hơn như gcc hoặc macosx, bởi vì Instrument.app cũng hiển thị địa chỉ thay vì số dòng. Tôi không quen với cách các biểu tượng gỡ lỗi hoạt động trên Mac OS X, vì vậy tôi sẽ nghĩ nó là thứ thiếu sót của tôi ở đây, thay vì bị lỗi trong gcc hoặc Mac OS X. Tôi tự hỏi liệu có ai có thể cung cấp một số gợi ý về cách hoạt động của thông tin gỡ lỗi hay không cho Mac OS X.
"Tôi đang thử hồ sơ một số chương trình C++" Vậy tại sao bạn gắn thẻ câu hỏi này là C? –
Vấn đề này không cụ thể đối với C++ mà còn cho C. –
Tôi không quen với HĐH X và googleperf, nhưng tôi đã sử dụng profiling libs trước đây và cũng như cờ -g để gỡ lỗi, chúng tôi phải thêm cờ -p vào trình biên dịch và trình liên kết để lấy chi tiết hồ sơ .. – fduff