I'm using perf record -a --call-graph dwarf -p XXX sleep 1
to record some function calls then perf report
to view that data, however it would be very helpful if I could also see source line numbers to know exactly where each function call was made. For example:
- 4.18% testbinary testbinary [.] malloc
- malloc
- 99.57% operator new(unsigned long)
+ 7.28% MyFunction()
I want to know where exactly in MyFunction()
are those new operators
called (without me guessing by looking at the whole function source code)
PS: Binary is compiled with -m64 -O2 -ggdb3
Fragments (full lines) of source code are printed by perf in annotate mode ( man page ; relevant part of The Perf Tutorial ). Use perf annotate -s=MyFunction
or in perf report
scroll down to the subtree where your MyFunction is root of tree (line where self time is reported; you can use / command to search for it) and then select a button (or Enter then Annotate "MyFunction").
Source code and its lines should be visible near assembly lines in Annotate mode. http://man7.org/linux/man-pages/man1/perf-annotate.1.html
This command reads the input file and displays an annotated version of the code. If the object file has debug symbols then the source code will be displayed alongside assembly code.
-l, --print-line Print matching source lines (may be slow). --source Interleave source code with assembly code. Enabled by default, disable with `--no-source`. -s, --symbol=<symbol> Symbol to annotate.
Perf report may use srclines in sorting ( --sort=
option) but instructions are unclear. Its man page documents --source
option too, but apparently it is used only in Annotate some_function mode: http://man7.org/linux/man-pages/man1/perf-report.1.html
--source Interleave source code with assembly code. Enabled by default, disable with --no-source.
I accidentally found it loosely documented in perf script
, but it applies to other commands as well: -F
option accepts srcline
. So you can do -F+srcline
to add the line number to existing columns.
Example: perf report -g fractal -F+period,srcline
Samples: 22K of event 'cycles:u', Event count (approx.): 13031011295
Children Self Period Source:Line Command Shared Object Symbol
+ 99.98% 38.76% 5051224000 test.cpp:7 a a [.] fib
+ 96.42% 0.00% 0 _start+94372992700461 a a [.] _start
+ 96.42% 0.00% 0 __libc_start_main+140304673091826 a libc-2.29.so [.] __libc_start_main
+ 96.42% 0.00% 0 test.cpp:13 a a [.] main
+ 21.47% 21.47% 2797741850 test.cpp:8 a a [.] fib
+ 16.69% 16.69% 2174469736 test.cpp:4 a a [.] fib
+ 16.37% 16.36% 2132462705 test.cpp:6 a a [.] fib
+ 6.69% 6.69% 871128215 test.cpp:5 a a [.] fib
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.