Tôi muốn chụp ảnh một số chương trình sau khi tôi thấy this nói chuyện từ CppCon 2015. Tôi đã tải xuống cùng thư viện điểm chuẩn của Google mà anh chàng sử dụng trong cuộc trò chuyện, biên dịch chương trình của tôi bằng các công tắc thích hợp , liên kết nó với nó, sau đó sử dụng perf để ghi lại một chạy. Các tùy chọn báo cáo mang lại cho tôi điều này:Perf hiển thị tên chức năng bị xáo trộn
Như bạn có thể nhìn thấy tên chức năng không phải là rất có thể đọc được. Tôi giả định điều này đã làm với C++ manglingling tên. Thật thú vị, tất cả các tên hàm hiển thị chính xác trong video cho người đã nói chuyện, nhưng không phải cho tôi. Tôi không nghĩ rằng đó là một trường hợp hoàn toàn thiếu thông tin biểu tượng bởi vì tôi sẽ chỉ nhìn thấy địa chỉ bộ nhớ trong trường hợp đó. Vì lý do nào đó, perf không thể "hoàn tác" tên mang tên C++ cho tôi, và điều này thật khó chịu khi nhìn vào.
Tôi đang sử dụng gcc (g ++) phiên bản 5.2.1, perf là phiên bản 4.2.6, và tôi sử dụng những công tắc khi biên dịch:
-I<my own include path> -L<path to the benchmark library> -O3 -std=c++14 -gdwarf-2 -fno-rtti -Wall -pedantic -lbenchmark -pthread
Lý do tại sao tôi không sử dụng -fno-omit-frame-pointer
là tôi sử dụng tùy chọn -gdwarf-2
thay vào đó, để lại thông tin gỡ lỗi trong tệp thực thi lùn, đây là một thay thế cho việc rời khỏi con trỏ khung trong trường hợp này. Điều này cũng có nghĩa là tôi vượt qua --call-graph "dwarf"
đến perf record
. Dù sao, tôi đã thử phương pháp con trỏ khung là tốt, và nó cho kết quả tương tự, vì vậy điều này không quan trọng thực sự.
Vậy tại sao bạn không hoàn thiện "hoàn tác" tên xén tên C++ trong trường hợp này? Điều này có liên quan đến việc sử dụng GCC không, điều này có nghĩa là tôi đang sử dụng libstdC++?
Tôi đang sử dụng Arch Linux và 'perf report' cho thấy biểu tượng chính xác. Trang man cho perf cũng cho thấy có một tùy chọn '--demangle' được kích hoạt mặc định. Vì tôi không nhìn thấy hành vi giống như bạn không có câu trả lời, nhưng những gì bạn đang thấy không phải là hành vi mặc định. –
Tôi đã thử thêm chuyển đổi đó theo cách thủ công, nhưng nó không thay đổi bất cứ điều gì – adam10603
@GabrielSouthern Bạn đang sử dụng gcc? – adam10603