วิธีการทำให้ linux 'perf record' ทำงานสำหรับสัญลักษณ์ libc และ libstdc ++?


12

ฉันใช้perf record -gx86-64 Linux เพื่อทำโปรไฟล์โปรแกรม สัญลักษณ์หลายอย่างใน libc หรือ libstdc ++ มี0เป็นพาเรนต์: __GI___strcmp_ssse3(libc) และstrcmp@plt(libstdc ++) เช่น (จริง ๆ แล้วฉันสามารถทำลายสัญลักษณ์เหล่านี้ในดีบักเกอร์และรับ backtrace)

ฉันชอบที่จะรู้ว่าผู้โทรหลักของฟังก์ชั่นเหล่านี้คืออะไรและทำไมจึงไม่ถูกบันทึก เป็นเพราะ libc และ libstdc ++ ไม่มีตัวชี้เฟรมบน x86_64 หรือไม่? และในทางปฏิบัติมากกว่านี้มีวิธีแก้ไขไหม?

คำตอบ:


5

นี่เป็นคำถามที่เก่า --call-graph dwarfแต่ในตอนนี้ไปได้ด้วย จากหน้าคน:

 -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.

ฉันเชื่อว่านี่ต้องใช้เคอร์เนล Linux ที่ค่อนข้างใหม่ (> = 3.9 ใช่ไหมฉันไม่แน่ใจทั้งหมด) คุณสามารถตรวจสอบว่าแพ็คเกจ perf ของ distro ของคุณเชื่อมโยงกับ libdw หรือ libunwind ด้วยหรือreadelf -d $(which perf) | grep -e libdw -e libunwindไม่ ใน Fedora 20, perf เชื่อมโยงกับ libdw


perf record --call-graph dwarfแก้ปัญหานี้ให้ฉัน โชคไม่ดีที่ดูเหมือนว่า perf มีปัญหาในการแสดงกราฟผู้โทร (เช่น "กลับ") เมื่อใช้ข้อมูลแคระ นั่นคือเหตุผลที่ฉันเริ่มใช้ FlameGraph เพื่อสร้างภาพ
สีฟ้า

โปรดทราบว่าการใช้การคลี่คลายของคนแคระทำให้เกิดค่าใช้จ่ายที่สำคัญมากในระหว่างการทำโปรไฟล์
Azsgy

-2

perfเป็นเครื่องมือเคอร์เนลซึ่งแสดงเวลาที่ผ่านไปสำหรับการโทรของระบบ คุณกำลังมองหา GNU gprof "gprof - แสดงข้อมูลโปรไฟล์กราฟการโทร". ในการใช้ gprof คุณต้องรวบรวมแหล่งที่มาด้วย-pgสวิตช์

eclipse-cdt-profiling-frameworkข้างนี้มีจำนวนมากของเครื่องมือโปรไฟล์ซับซ้อนเช่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.