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 [aspacemgr] : show valgrind heap memory stats
     (with aspacemgr arg, also shows valgrind segments on log ouput)
  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
