mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-12 22:24:53 +00:00
showing inlined function calls. See 278972 valgrind stacktraces and suppression do not handle inlined function call debuginfo Reading the inlined dwarf call info is activated using the new clo --read-inline-info=yes Default is currently no but an objective is to optimise the performance and memory in order to possibly set it on by default. (see below discussion about performances). Basically, the patch provides the following pieces: 1. Implement a new dwarf3 reader that reads the inlined call info 2. Some performance improvements done for this new parser, and on some common code between the new parser and the var info parser. 3. Use the parsed inlined info to produce stacktrace showing inlined calls 4. Use the parsed inlined info in the suppression matching and suppression generation 5. and of course, some reg tests 1. new dwarf3 reader: --------------------- Two options were possible: add the reading of the inlined info in the current var info dwarf reader, or add a 2nd reader. The 2nd approach was preferred, for the following reasons: The var info reader is slow, memory hungry and quite complex. Having a separate parsing phase for the inlined information is simpler/faster when just reading the inlined info. Possibly, a single parser would be faster when using both --read-var-info=yes and --read-inline-info=yes. However, var-info being extremely memory/cpu hungry, it is unlikely to be used often, and having a separate parsing for inlined info does in any case make not much difference. (--read-var-info=yes is also now less interesting thanks to commit r13991, which provides a fast and low memory "reasonable" location for an address). The inlined info parser reads the dwarf info to make calls to priv_storage.h ML_(addInlInfo). 2. performance optimisations ---------------------------- * the abbrev cache has been improved in revision r14035. * The new parser skips the non interesting DIEs (the var-info parser has no logic to skip uninteresting DIEs). * Some other minor perf optimisation here and there. In total now, on a big executable, 15 seconds CPU are needed to create the inlined info (on my slow x86 pentium). With regards to memory, the dinfo arena: with inlined info: 172281856/121085952 max/curr mmap'd without : 157892608/106721280 max/curr mmap'd, So, basically, inlined information costs about 15Mb of memory for my big executable (compared to first version of the patch, this is already using less memory, thanks to the strpool deduppoolalloc. The needed memory can probably be decreased somewhat more. 3. produce better stack traces ------------------------------ VG_(describe_IP) has a new argument InlIPCursor *iipc which allows to describe inlined function calls by doing repetitive calls to describe_IP. See pub_tool_debuginfo.h for a description. 4. suppression generation and matching -------------------------------------- * suppression generation now also uses an InlIPCursor *iipc to generate a line for each inlined fn call. * suppression matching: to allow suppression matching to match one IP to several function calls in a suppression entry, the 'inputCompleter' object (that allows to lazily generate function or object names for a stacktrace when matching an error with a suppression) has been generalised a little bit more to also lazily generate the input sequence. VG_(generic_match) has been updated so as to be more generic with respect to the input completer : when providing an input completer, VG_(generic_match) does not need anymore to produce/compute any input itself : this is all delegated to the input completer. 5. various regtests ------------------- to test stack traces with inlined calls, and suppressions of (some of) these errors using inlined fn calls matching. Work still to do: ----------------- * improve parsing performance * improve the memory overhead. * handling the directory name for files of the inlined function calls is not yet done. (probably implies to refactor some code) * see if m_errormgr.c *offsets arrays cannot be managed via xarray git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14036
186 lines
11 KiB
Plaintext
186 lines
11 KiB
Plaintext
usage: valgrind [options] prog-and-args
|
|
|
|
tool-selection option, with default in [ ]:
|
|
--tool=<name> use the Valgrind tool named <name> [memcheck]
|
|
|
|
basic user options for all Valgrind tools, with defaults in [ ]:
|
|
-h --help show this message
|
|
--help-debug show this message, plus debugging options
|
|
--version show version
|
|
-q --quiet run silently; only print error msgs
|
|
-v --verbose be more verbose -- show misc extra info
|
|
--trace-children=no|yes Valgrind-ise child processes (follow execve)? [no]
|
|
--trace-children-skip=patt1,patt2,... specifies a list of executables
|
|
that --trace-children=yes should not trace into
|
|
--trace-children-skip-by-arg=patt1,patt2,... same as --trace-children-skip=
|
|
but check the argv[] entries for children, rather
|
|
than the exe name, to make a follow/no-follow decision
|
|
--child-silent-after-fork=no|yes omit child output between fork & exec? [no]
|
|
--vgdb=no|yes|full activate gdbserver? [yes]
|
|
full is slower but provides precise watchpoint/step
|
|
--vgdb-error=<number> invoke gdbserver after <number> errors [999999999]
|
|
to get started quickly, use --vgdb-error=0
|
|
and follow the on-screen directions
|
|
--vgdb-stop-at=event1,event2,... invoke gdbserver for given events [none]
|
|
where event is one of startup exit valgrindabexit all none
|
|
--track-fds=no|yes track open file descriptors? [no]
|
|
--time-stamp=no|yes add timestamps to log messages? [no]
|
|
--log-fd=<number> log messages to file descriptor [2=stderr]
|
|
--log-file=<file> log messages to <file>
|
|
--log-socket=ipaddr:port log messages to socket ipaddr:port
|
|
|
|
user options for Valgrind tools that report errors:
|
|
--xml=yes emit error output in XML (some tools only)
|
|
--xml-fd=<number> XML output to file descriptor
|
|
--xml-file=<file> XML output to <file>
|
|
--xml-socket=ipaddr:port XML output to socket ipaddr:port
|
|
--xml-user-comment=STR copy STR verbatim into XML output
|
|
--demangle=no|yes automatically demangle C++ names? [yes]
|
|
--num-callers=<number> show <number> callers in stack traces [12]
|
|
--error-limit=no|yes stop showing new errors if too many? [yes]
|
|
--error-exitcode=<number> exit code to return if errors found [0=disable]
|
|
--show-below-main=no|yes continue stack traces below main() [no]
|
|
--suppressions=<filename> suppress errors described in <filename>
|
|
--gen-suppressions=no|yes|all print suppressions for errors? [no]
|
|
--db-attach=no|yes start debugger when errors detected? [no]
|
|
--db-command=<command> command to start debugger [... -nw %f %p]
|
|
--input-fd=<number> file descriptor for input [0=stdin]
|
|
--dsymutil=no|yes run dsymutil on Mac OS X when helpful? [no]
|
|
--max-stackframe=<number> assume stack switch for SP changes larger
|
|
than <number> bytes [2000000]
|
|
--main-stacksize=<number> set size of main thread's stack (in bytes)
|
|
[min(max(current 'ulimit' value,1MB),16MB)]
|
|
|
|
user options for Valgrind tools that replace malloc:
|
|
--alignment=<number> set minimum alignment of heap allocations [not used by this tool]
|
|
--redzone-size=<number> set minimum size of redzones added before/after
|
|
heap blocks (in bytes). [not used by this tool]
|
|
|
|
uncommon user options for all Valgrind tools:
|
|
--fullpath-after= (with nothing after the '=')
|
|
show full source paths in call stacks
|
|
--fullpath-after=string like --fullpath-after=, but only show the
|
|
part of the path after 'string'. Allows removal
|
|
of path prefixes. Use this flag multiple times
|
|
to specify a set of prefixes to remove.
|
|
--extra-debuginfo-path=path absolute path to search for additional
|
|
debug symbols, in addition to existing default
|
|
well known search paths.
|
|
--debuginfo-server=ipaddr:port also query this server
|
|
(valgrind-di-server) for debug symbols
|
|
--allow-mismatched-debuginfo=no|yes [no]
|
|
for the above two flags only, accept debuginfo
|
|
objects that don't "match" the main object
|
|
--smc-check=none|stack|all|all-non-file [stack]
|
|
checks for self-modifying code: none, only for
|
|
code found in stacks, for all code, or for all
|
|
code except that from file-backed mappings
|
|
--read-inline-info=yes|no read debug info about inlined function calls
|
|
and use it to do better stack traces [no]
|
|
--read-var-info=yes|no read debug info on stack and global variables
|
|
and use it to print better error messages in
|
|
tools that make use of it (Memcheck, Helgrind,
|
|
DRD) [no]
|
|
--vgdb-poll=<number> gdbserver poll max every <number> basic blocks [5000]
|
|
--vgdb-shadow-registers=no|yes let gdb see the shadow registers [no]
|
|
--vgdb-prefix=<prefix> prefix for vgdb FIFOs [/tmp/vgdb-pipe]
|
|
--run-libc-freeres=no|yes free up glibc memory at exit on Linux? [yes]
|
|
--sim-hints=hint1,hint2,... known hints:
|
|
lax-ioctls, enable-outer, fuse-compatible [none]
|
|
--fair-sched=no|yes|try schedule threads fairly on multicore systems [no]
|
|
--kernel-variant=variant1,variant2,... known variants: bproc [none]
|
|
handle non-standard kernel variants
|
|
--merge-recursive-frames=<number> merge frames between identical
|
|
program counters in max <number> frames) [0]
|
|
--num-transtab-sectors=<number> size of translated code cache [16]
|
|
more sectors may increase performance, but use more memory.
|
|
--aspace-minaddr=0xPP avoid mapping memory below 0xPP [guessed]
|
|
--show-emwarns=no|yes show warnings about emulation limits? [no]
|
|
--require-text-symbol=:sonamepattern:symbolpattern abort run if the
|
|
stated shared object doesn't have the stated
|
|
text symbol. Patterns can contain ? and *.
|
|
--soname-synonyms=syn1=pattern1,syn2=pattern2,... synonym soname
|
|
specify patterns for function wrapping or replacement.
|
|
To use a non-libc malloc library that is
|
|
in the main exe: --soname-synonyms=somalloc=NONE
|
|
in libxyzzy.so: --soname-synonyms=somalloc=libxyzzy.so
|
|
--sigill-diagnostics=yes|no warn about illegal instructions? [yes]
|
|
--unw-stack-scan-thresh=<number> Enable stack-scan unwind if fewer
|
|
than <number> good frames found [0, meaning "disabled"]
|
|
NOTE: stack scanning is only available on arm-linux.
|
|
--unw-stack-scan-frames=<number> Max number of frames that can be
|
|
recovered by stack scanning [5]
|
|
|
|
user options for Nulgrind:
|
|
(none)
|
|
|
|
debugging options for all Valgrind tools:
|
|
-d show verbose debugging output
|
|
--stats=no|yes show tool and core statistics [no]
|
|
--sanity-level=<number> level of sanity checking to do [1]
|
|
--trace-flags=<XXXXXXXX> show generated code? (X = 0|1) [00000000]
|
|
--profile-flags=<XXXXXXXX> ditto, but for profiling (X = 0|1) [00000000]
|
|
--profile-interval=<number> show profile every <number> event checks
|
|
[0, meaning only at the end of the run]
|
|
--trace-notbelow=<number> only show BBs above <number> [999999999]
|
|
--trace-notabove=<number> only show BBs below <number> [0]
|
|
--trace-syscalls=no|yes show all system calls? [no]
|
|
--trace-signals=no|yes show signal handling details? [no]
|
|
--trace-symtab=no|yes show symbol table details? [no]
|
|
--trace-symtab-patt=<patt> limit debuginfo tracing to obj name <patt>
|
|
--trace-cfi=no|yes show call-frame-info details? [no]
|
|
--debug-dump=syms mimic /usr/bin/readelf --syms
|
|
--debug-dump=line mimic /usr/bin/readelf --debug-dump=line
|
|
--debug-dump=frames mimic /usr/bin/readelf --debug-dump=frames
|
|
--trace-redir=no|yes show redirection details? [no]
|
|
--trace-sched=no|yes show thread scheduler details? [no]
|
|
--profile-heap=no|yes profile Valgrind's own space use
|
|
--core-redzone-size=<number> set minimum size of redzones added before/after
|
|
heap blocks allocated for Valgrind internal use (in bytes) [4]
|
|
--wait-for-gdb=yes|no pause on startup to wait for gdb attach
|
|
--sym-offsets=yes|no show syms in form 'name+offset' ? [no]
|
|
--command-line-only=no|yes only use command line options [no]
|
|
|
|
Vex options for all Valgrind tools:
|
|
--vex-iropt-verbosity=<0..9> [0]
|
|
--vex-iropt-level=<0..2> [2]
|
|
--vex-iropt-register-updates=sp-at-mem-access
|
|
|unwindregs-at-mem-access
|
|
|allregs-at-mem-access
|
|
|allregs-at-each-insn [unwindregs-at-mem-access]
|
|
--vex-iropt-unroll-thresh=<0..400> [120]
|
|
--vex-guest-max-insns=<1..100> [50]
|
|
--vex-guest-chase-thresh=<0..99> [10]
|
|
--vex-guest-chase-cond=no|yes [no]
|
|
--trace-flags and --profile-flags values (omit the middle space):
|
|
1000 0000 show conversion into IR
|
|
0100 0000 show after initial opt
|
|
0010 0000 show after instrumentation
|
|
0001 0000 show after second opt
|
|
0000 1000 show after tree building
|
|
0000 0100 show selecting insns
|
|
0000 0010 show after reg-alloc
|
|
0000 0001 show final assembly
|
|
0000 0000 show summary profile only
|
|
(Nb: you need --trace-notbelow and/or --trace-notabove
|
|
with --trace-flags for full details)
|
|
|
|
debugging options for Valgrind tools that report errors
|
|
--dump-error=<number> show translation for basic block associated
|
|
with <number>'th error context [0=show none]
|
|
|
|
debugging options for Valgrind tools that replace malloc:
|
|
--trace-malloc=no|yes show client malloc details? [no]
|
|
|
|
debugging options for Nulgrind:
|
|
(none)
|
|
|
|
Extra options read from ~/.valgrindrc, $VALGRIND_OPTS, ./.valgrindrc
|
|
|
|
Nulgrind is Copyright (C) 2002-2013, and GNU GPL'd, by Nicholas Nethercote.
|
|
Valgrind is Copyright (C) 2000-2013, and GNU GPL'd, by Julian Seward et al.
|
|
LibVEX is Copyright (C) 2004-2013, and GNU GPL'd, by OpenWorks LLP et al.
|
|
|
|
Bug reports, feedback, admiration, abuse, etc, to: www.valgrind.org.
|
|
|