mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 10:05:29 +00:00
about leaked or reachable blocks)
This patch implements two new memcheck gdbserver monitor commands:
block_list <loss_record_nr>
after a leak search, shows the list of blocks of <loss_record_nr>
who_points_at <addr> [<len>]
shows places pointing inside <len> (default 1) bytes at <addr>
(with len 1, only shows "start pointers" pointing exactly to <addr>,
with len > 1, will also show "interior pointers")
Compiled and reg-tested on f12/x86, deb5/amd64, f16/ppc64.
The 'block_list' command is implemented on top of the
lr_array/lc_chunks/lc_extras arrays used during the last leak search.
NB: no impact on the memory for the typical Valgrind usage where a leak
search is only done at the end of the run.
Printing the block_list of a loss record simply consists in scanning the
lc_chunks to find back the chunks corresponding to the loss record for which
block lists is requested.
The 'who_points_at' command is implemented by doing a scan similar to
(but simpler than) the leak search scan.
lc_scan_memory has been enhanced to have a mode to search for a specific
address, rather than to search for all allocated blocks.
VG_(apply_to_GP_regs) has been enhanced to also provide the ThreadId and
register name in the callback function.
The patch touches multiple files (but most changes are easy/trivial or factorise
existing code).
Most significant changes are in memcheck/mc_leakcheck.c :
* changed the LC_Extra struct to remember the clique for indirect leaks
(size of structure not changed).
* made lr_array a static global
* changed lc_scan_memory:
to have a search mode for a specific address (for who_points_at)
(for leak search) to pass a 'current clique' in addition to the clique
leader
so as to have a proper clique hierarchy for indirectly leaked blocks.
* print_results: reset values at the beginning of the print_result of the
next leak search, rather than at the end of print_results of the previous
leak search.
This allows to continue showing the same info for loss records till a new
leak search is done.
* new function print_clique which recursively prints a group of leaked
blocks, starting from the clique leader.
* new function MC_(print_block_list) : calls print_clique for each clique
leader found for the given loss record.
* static void scan_memory_root_set : code extracted from
MC_(detect_memory_leaks) (no relevant change)
* void MC_(who_points_at) : calls scan_memory_root_set, lc_scan_memory
and VG_(apply_to_GP_regs)(search_address_in_GP_reg) to search
pointers to the given address.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12357
84 lines
4.3 KiB
Plaintext
84 lines
4.3 KiB
Plaintext
general valgrind monitor commands:
|
|
help [debug] : monitor command help. With debug: + debugging commands
|
|
v.wait [<ms>] : sleep <ms> (default 0) then continue
|
|
v.info all_errors : show all errors found so far
|
|
v.info last_error : show last error found
|
|
v.info n_errs_found : show the nr of errors found so far
|
|
v.kill : kill the Valgrind process
|
|
v.set gdb_output : set valgrind output to gdb
|
|
v.set log_output : set valgrind output to log
|
|
v.set mixed_output : set valgrind output to log, interactive output to gdb
|
|
v.set vgdb-error <errornr> : debug me at error >= <errornr>
|
|
|
|
memcheck monitor commands:
|
|
get_vbits <addr> [<len>]
|
|
returns validity bits for <len> (or 1) bytes at <addr>
|
|
bit values 0 = valid, 1 = invalid, __ = unaddressable byte
|
|
Example: get_vbits 0x........ 10
|
|
make_memory [noaccess|undefined
|
|
|defined|Definedifaddressable] <addr> [<len>]
|
|
mark <len> (or 1) bytes at <addr> with the given accessibility
|
|
check_memory [addressable|defined] <addr> [<len>]
|
|
check that <len> (or 1) bytes at <addr> have the given accessibility
|
|
and outputs a description of <addr>
|
|
leak_check [full*|summary] [reachable|possibleleak*|definiteleak]
|
|
[increased*|changed|any]
|
|
[unlimited*|limited <max_loss_records_output>]
|
|
* = defaults
|
|
Examples: leak_check
|
|
leak_check summary any
|
|
leak_check full reachable any limited 100
|
|
block_list <loss_record_nr>
|
|
after a leak search, shows the list of blocks of <loss_record_nr>
|
|
who_points_at <addr> [<len>]
|
|
shows places pointing inside <len> (default 1) bytes at <addr>
|
|
(with len 1, only shows "start pointers" pointing exactly to <addr>,
|
|
with len > 1, will also show "interior pointers")
|
|
|
|
general valgrind monitor commands:
|
|
help [debug] : monitor command help. With debug: + debugging commands
|
|
v.wait [<ms>] : sleep <ms> (default 0) then continue
|
|
v.info all_errors : show all errors found so far
|
|
v.info last_error : show last error found
|
|
v.info n_errs_found : show the nr of errors found so far
|
|
v.kill : kill the Valgrind process
|
|
v.set gdb_output : set valgrind output to gdb
|
|
v.set log_output : set valgrind output to log
|
|
v.set mixed_output : set valgrind output to log, interactive output to gdb
|
|
v.set vgdb-error <errornr> : debug me at error >= <errornr>
|
|
debugging valgrind internals monitor commands:
|
|
v.info gdbserver_status : show gdbserver status
|
|
v.info memory : show valgrind heap memory stats
|
|
v.info scheduler : show valgrind thread state and stacktrace
|
|
v.set debuglog <level> : set valgrind debug log level to <level>
|
|
v.translate <addr> [<traceflags>] : debug translation of <addr> with <traceflags>
|
|
(default traceflags 0b00100000 : show after instrumentation)
|
|
An additional flag 0b100000000 allows to show gdbserver instrumentation
|
|
|
|
memcheck monitor commands:
|
|
get_vbits <addr> [<len>]
|
|
returns validity bits for <len> (or 1) bytes at <addr>
|
|
bit values 0 = valid, 1 = invalid, __ = unaddressable byte
|
|
Example: get_vbits 0x........ 10
|
|
make_memory [noaccess|undefined
|
|
|defined|Definedifaddressable] <addr> [<len>]
|
|
mark <len> (or 1) bytes at <addr> with the given accessibility
|
|
check_memory [addressable|defined] <addr> [<len>]
|
|
check that <len> (or 1) bytes at <addr> have the given accessibility
|
|
and outputs a description of <addr>
|
|
leak_check [full*|summary] [reachable|possibleleak*|definiteleak]
|
|
[increased*|changed|any]
|
|
[unlimited*|limited <max_loss_records_output>]
|
|
* = defaults
|
|
Examples: leak_check
|
|
leak_check summary any
|
|
leak_check full reachable any limited 100
|
|
block_list <loss_record_nr>
|
|
after a leak search, shows the list of blocks of <loss_record_nr>
|
|
who_points_at <addr> [<len>]
|
|
shows places pointing inside <len> (default 1) bytes at <addr>
|
|
(with len 1, only shows "start pointers" pointing exactly to <addr>,
|
|
with len > 1, will also show "interior pointers")
|
|
|
|
monitor command request to kill this process
|