Using and understanding the Valgrind core: Advanced Topics
• Unknown limitations or problems.
The combination of GDB, Valgrind and the Valgrind gdbserver probably has unknown other limitations and
problems.
If you encounter strange or unexpected behaviour, feel free to report a bug.
But first please verify
that the limitation or problem is not inherent to GDB or the GDB remote protocol. You may be able to do so by
checking the behaviour when using standard gdbserver part of the GDB package.
3.2.9. vgdb command line options
Usage:
vgdb [OPTION]...
[[-c] COMMAND]...
vgdb ("Valgrind to GDB") is a small program that is used as an intermediary between Valgrind and GDB or a shell.
Therefore, it has two usage modes:
1. As a standalone utility, it is used from a shell command line to send monitor commands to a process running under
Valgrind. For this usage, the vgdb OPTION(s) must be followed by the monitor command to send. To send more
than one command, separate them with the
-c
option.
2. In combination with GDB "target remote |" command, it is used as the relay application between GDB and the
Valgrind gdbserver. For this usage, only OPTION(s) can be given, but no COMMAND can be given.
vgdb
accepts the following options:
•
--pid=<number>
: specifies the PID of the process to which vgdb must connect to. This option is useful in case
more than one Valgrind gdbserver can be connected to. If the
--pid
argument is not given and multiple Valgrind
gdbserver processes are running, vgdb will report the list of such processes and then exit.
•
--vgdb-prefix
must be given to both Valgrind and vgdb if you want to change the default prefix for the FIFOs
(named pipes) used for communication between the Valgrind gdbserver and vgdb.
•
--wait=<number>
instructs vgdb to search for available Valgrind gdbservers for the specified number of
seconds.
This makes it possible start a vgdb process before starting the Valgrind gdbserver with which you
intend the vgdb to communicate.
This option is useful when used in conjunction with a
--vgdb-prefix
that
is unique to the process you want to wait for. Also, if you use the
--wait
argument in the GDB "target remote"
command, you must set the GDB remotetimeout to a value bigger than the --wait argument value.
See option
--max-invoke-ms
(just below) for an example of setting the remotetimeout value.
•
--max-invoke-ms=<number>
gives the number of milliseconds after which vgdb will force the invocation of
gdbserver embedded in Valgrind. The default value is 100 milliseconds. A value of 0 disables forced invocation.
The forced invocation is used when vgdb is connected to a Valgrind gdbserver, and the Valgrind process has all its
threads blocked in a system call.
If you specify a large value, you might need to increase the GDB "remotetimeout" value from its default value of
2 seconds. You should ensure that the timeout (in seconds) is bigger than the
--max-invoke-ms
value.
For
example, for
--max-invoke-ms=5000
, the following GDB command is suitable:
(gdb) set remotetimeout 6
•
--cmd-time-out=<number>
instructs a standalone vgdb to exit if the Valgrind gdbserver it is connected to
does not process a command in the specified number of seconds. The default value is to never time out.
42