Saya menggunakan perf record -g
di x86-64 Linux untuk membuat profil suatu program. Beberapa simbol dalam libc atau libstdc ++ memiliki 0
sebagai induk: __GI___strcmp_ssse3
(libc) dan strcmp@plt
(libstdc ++) misalnya. (Saya benar-benar dapat mematahkan simbol-simbol ini di debugger dan mendapatkan backtrace.)
Saya ingin tahu apa penelepon utama dari fungsi-fungsi ini, dan mengapa mereka tidak direkam. Apakah ini karena libc dan libstdc ++ tidak memiliki frame pointer di x86_64? Dan, lebih praktisnya, apakah ada jalan keluarnya?
perf record --call-graph dwarf
Memecahkan masalah ini untuk saya. Sayangnya, tampaknya perf memiliki masalah yang menunjukkan grafik panggilan berbasis penelepon (yaitu "terbalik") ketika menggunakan informasi katai. Itu sebabnya saya mulai menggunakan FlameGraph untuk visualisasi.perf
adalah alat kernel yang menunjukkan waktu yang telah berlalu untuk panggilan sistem. Anda mencari gprof GNU. "gprof - tampilkan data profil grafik panggilan". Untuk menggunakan gprof, Anda perlu mengkompilasi sumber Anda dengan-pg
switch.Selain itu ada banyak alat profil canggih seperti
eclipse-cdt-profiling-framework
.sumber