Làm cách nào để linux 'bản ghi hoàn hảo' hoạt động cho các biểu tượng libc và libstdc ++?


12

Tôi đang sử dụng perf record -gtrên x86-64 Linux để cấu hình một chương trình. Một số biểu tượng trong libc hoặc libstdc ++ có 0dạng cha mẹ: __GI___strcmp_ssse3(libc) và strcmp@plt(libstdc ++) chẳng hạn. (Tôi thực sự có thể phá vỡ các biểu tượng này trong trình gỡ lỗi và nhận được một backtrace.)

Tôi muốn biết những người gọi chính của các chức năng này là gì và tại sao chúng không được ghi lại. Đây có phải là vì libc và libstdc ++ không có con trỏ khung trên x86_64? Và, thực tế hơn, có một số cách xung quanh này?

Câu trả lời:


5

Đây là một câu hỏi cũ, nhưng bây giờ có thể với --call-graph dwarf. Từ trang người đàn ông:

 -g
       Enables call-graph (stack chain/backtrace) recording.

   --call-graph
       Setup and enable call-graph (stack chain/backtrace) recording, implies -g.

           Allows specifying "fp" (frame pointer) or "dwarf"
           (DWARF's CFI - Call Frame Information) as the method to collect
           the information used to show the call graphs.

           In some systems, where binaries are build with gcc
           --fomit-frame-pointer, using the "fp" method will produce bogus
           call graphs, using "dwarf", if available (perf tools linked to
           the libunwind library) should be used instead.

Tôi tin rằng điều này đòi hỏi một nhân Linux gần đây (> = 3.9? Tôi không hoàn toàn chắc chắn). Bạn có thể kiểm tra xem gói hoàn hảo của distro của bạn có được liên kết với libdw hoặc libunwind với readelf -d $(which perf) | grep -e libdw -e libunwind. Trên Fedora 20, perf được liên kết với libdw.


perf record --call-graph dwarfgiải quyết vấn đề này cho tôi thật không may, có vẻ như perf có vấn đề khi hiển thị biểu đồ cuộc gọi dựa trên người gọi (tức là "đảo ngược") khi sử dụng thông tin lùn. Đó là lý do tại sao tôi bắt đầu sử dụng FlameGraph để trực quan hóa.
màu xanh

-2

perflà một công cụ kernel hiển thị thời gian đã trôi qua cho các cuộc gọi hệ thống. Bạn đang tìm kiếm GNU gprof. "gprof - hiển thị dữ liệu hồ sơ biểu đồ cuộc gọi". Để sử dụng gprof, bạn cần biên dịch các nguồn của mình bằng công -pgtắc.

Bên cạnh đó có rất nhiều công cụ định hình tinh vi như thế nào eclipse-cdt-profiling-framework.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.