From 78bccfa0fc7e73c5314a5eed1be1807b022469f0 Mon Sep 17 00:00:00 2001 From: johannst Date: Thu, 14 Nov 2019 16:19:01 +0100 Subject: updated debug notes --- debug.txt | 179 +++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 132 insertions(+), 47 deletions(-) diff --git a/debug.txt b/debug.txt index e7f0da6..7d693f6 100644 --- a/debug.txt +++ b/debug.txt @@ -1,75 +1,160 @@ .:: debugging ::. -------------------------------------------------------------------------------- -# print syscalls of process with all threads (-f) of running process -strace -f -p -# only trace certain syscalls +# +# strace(1) +# + +strace [OPTS] [ELF] + -f .......... follow child processes on fork(2) + -p .... attach to running process + -s ... max string size (default: 32) + -e ... expression for trace filtering + -o ... log output into + +useful : + trace=syscall[,syscall] .... trace only syscall listed + trace=file ................. trace all syscall that take a filename as arg + trace=process .............. trace process management related syscalls + signal ..................... trace signals delivered to the process + +use cases: +- trace 'open & socket' syscalls for a running process + childs strace -f -p -e trace=open,socket -# trace signals delivered to process + +- trace signals delivered to a running process strace -f -p -e signal -# dump stack of process and all threads -pstack -# print file flags -# +fg print file flag abbreviations +# +# lsof(8) +# + +lsof +fg -p + -p ... list open files for process + +fg ........ show file flags for file descripros + +file flags: + R/W/RW ..... read/write/read-write + CR ......... create + AP ......... append + TR ......... truncate + +uase cases: +- show open files with file flags lsof +fg -p -# print process virt mem map -# compared to /proc/<>/maps it shows the size of the mappings + +# +# pmap(1) +# + pmap + ............. dump virtual memory map of process. + compared to /proc//maps it shows the size of the mappings + + +# +# pstack(1) +# + +pstack + ............. dump current stack of process + threads + + +# +# pidstat(1) +# # trace minor/major page faults pidstat -r -p [interval] + minor_pagefault: happens when the page needed is already in memory but not + allocated to the faulting process, in that case the kernel + only has to create a new page-table entry pointing to the + shared physical page + major_pagefault: happends when the page needed is NOT in memory, the kernel + has to create a new page-table entry and populate the + physical page + + +# +# /usr/bin/time(1) +# # statistics of process run /usr/bin/time -v +# +# perf(1) +# + # get supported events perf list - -## show process stats -perf stat -p -perf stat -p -I -# select events of interests -perf stat -p -e cycles,faults,cache-misses,context-switches - -# -K hide kernel threads -perf top -F 99 -p -K - -## record measurement into db -# -g uses 'fb' = frame-pointer as default method to collect backtraces -# tell gcc to not optimize fp out -fno-omit-frame-pointer -perf record -F 99 -p -g -# use post processing and dwarf to collect backtraces -perf record -F 99 -p --call-graph dwarf -perf record -F 99 -p -e instructions,cpu-cycles,faults,cache-misses,context-switches - -## report perf db -# print to stdio -perf report -n --stdio -# use tui -perf report -g graph,0.5,caller - -# flamegraph (https://github.com/brendangregg/FlameGraph) -# record events of interest, eg page-faults -perf record -e page-faults --call-graph dwarf -perf script | FlameGraph/stackcollapse-perf.pl > out.perf-folded -FlameGraph/flamegraph.pl out.perf-folded > perf-trace.svg - -# record multiple events and generate flamegraphs -perf record --call-graph dwarf -p $(pgrep -u jstolp -n sim) -F 200 -e cpu-cycles,page-faults + ......... show supported hw/sw events + +perf stat + -p .. show stats for running process + -I ... show stats periodically over interval + -e ... filter for events + +perf top + -p .. show stats for running process + -F ... sampling frequency + -K ........ hide kernel threads + +perf record + -p ............... record stats for running process + -F ................ sampling frequency + --call-graph .. [fp, dwarf, lbr] method how to caputre backtrace + fp : use frame-pointer, need -fno-omit-frame-pointer + dwarf: use .cfi debug information + lbr : use hardware last branch record facility + -g ..................... short-hand for --call-graph fp + -e ................ filter for events + +perf report + -n .................... annotate symbols with nr of samples + --stdio ............... report to stdio, if not presen tui mode + -g graph,0.5,caller ... show caller based call chains with value >0.5 + +useful : + page-faults + minor-faults + major-faults + cpu-cycles` + task-clock + + +# +# flamegraph(https://github.com/brendangregg/FlameGraph) +# + +# flamegraph for single event trace +perf record -g -p -e cpu-cycles +perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > cycles-flamegraph.svg + +# flamegraphs for multiple events trace +perf record -g -p -e cpu-cycles,page-faults perf script --per-event-dump # fold & generate as above +# -# print supported events -ophelp +# +# OProfile +# -operf -p +operf -g -p + -g ...... caputre call-graph information -opreport -c -opreport -l +opreport [opt] FILE + NOOPT ... show time spent per binary image + -l ...... show time spent per symbol + -c ...... show callgraph information (see below) + -a ...... add column with time spent accumulated over child nodes + +ophelp + NOOPT ... show supported hw/sw events -------------------------------------------------------------------------------- vim:sts=2:et:tw=80:cc=80:fo+=t:ft=help -- cgit v1.2.3