Tôi cần lập hồ sơ một số mã chạy C ++ trên Linux. Các bạn có thể giới thiệu một số người làm hồ sơ không?
Tôi cần lập hồ sơ một số mã chạy C ++ trên Linux. Các bạn có thể giới thiệu một số người làm hồ sơ không?
Câu trả lời:
Sử dụng gprof.
Chỉ cần biên dịch với -pg
flag (tôi nghĩ (nhưng không chắc) bạn phải thực hiện tối ưu hóa.) Và sử dụng gprof để phân tích tệp gmon.out mà tệp thực thi của bạn sau đó sẽ tạo ra.
ví dụ:
gcc -pg -o whatever whatever.c
./whatever
gprof whatever gmon.out
Điều tương tự với g ++ và cpp.
valgrind là một trình biên dịch Linux nổi tiếng
Thu phóng từ RotateRight ( http://www.rotateright.com ) là những gì tôi đang sử dụng. Nó có một cái nhìn bướm về các chức năng và bạn có thể nhấp đúp vào bất kỳ chức năng nào để đi sâu vào mã nguồn hoặc mã asm. Xây dựng với thông tin gỡ lỗi (-g) để xem nguồn của bạn, nhưng bạn vẫn nên xây dựng và lập hồ sơ mã được tối ưu hóa .
-fno-omit-frame-pointer
để cấu hình hiệu quả.
Tôi là một fan hâm mộ của Oprofile . Nó liên quan đến việc cài đặt một mô-đun hạt nhân và có một chút đường cong học tập về nó, nhưng nó khá mạnh và hoạt động rất tốt cho các chương trình / chương trình được tối ưu hóa mà không có ký hiệu gỡ lỗi.
Vtune là một công cụ cấu hình rất mạnh khác của Intel. Tôi tin rằng phiên bản Linux là miễn phí cho phần mềm phi thương mại.
Ngoài ra còn có bộ công cụ Valgrind do dfa đề xuất. Callgrind có lẽ sẽ là thứ bạn quan tâm nhất. Cachegrind (có tập các tính năng là một tập con của Callgrind) và Massif cũng rất thú vị, nhưng tôi không có kinh nghiệm về phần sau.
Hãy xem KCacheGrind là một giao diện đồ họa cho valgrind và làm cho nó thực sự dễ sử dụng.
Google cũng có một trình biên dịch đẹp mắt như một phần của google-perftools - được bao gồm trong Debian / Ubuntu và có thể là các bản phân phối khác.
Hãy xem Sysprof . Bạn rất có thể phân phối nó đã có sẵn.
Lưu ý rằng tất cả các trình cấu hình được đề cập hoạt động tốt nhất nếu ứng dụng của bạn được biên dịch bằng con trỏ khung. Đó là, bạn nên sử dụng -fno-omit-frame-pointer trên dòng lệnh gcc.