With this module you get the va command which allows you to inspect the passed arguments. This depends on a lots of
heuristics and can fail especially when
- The passed argument combination is unusual
- Compiler optimization gets in our way
- arguments are forwarded to other vararg functions that reuse the structure
The key object here is a va_list object that must be available within the called function somehow.
The command has several parameters that are often optional, but in the case the automatic can't do it, you can help specific parts of it by providing the necessary information.
Calling it this way will automatically try to find a va_list type in the current scope. If it can't it will tell you
and you have to specify the variable name yourself.
You can set a default format via the vdb-va-default-format for this or override it by specifying it on the command
line. It is a specification about how the call is most likely structured. From the va_list alone it is often not
possible to figure out the amount and order of certain types. The string can be a combination of the following
characters (uppercase always means it is a fixed argument, prepending the varargs)
*The asterisk will mean that the last string is parsed as a printf format string and the output is tried to recover from there. On its own it means to show as much as possiblei,l,uandjare specifiers for integers.iandlare the 32 and 64 bit signed versions anduandjare the respective unsigned versionssis a string (char pointer).pis a specifier for formatting an integer as a hex pointer output.fanddare for float and doubles
The most common semi-automatic value used for printf is possibly S*.
Especially when forwarding arguments, or when otherwise not (yet) properly filling the va_list structure, specifying
this will allow you to work completely without a va_list structure if necessary.
Often you hit a breakpoint, like for printf and then the va_list is not properly setup. The va wait command can help
here in that it single steps until it thinks it is in a valid state.
Note: If the possibly unitialized memory already contained the proper values, this may execute too much instructions, possibly breaking other memory structures necessary (especially fixed arguments).
Further configuration options are
vdb-va-colors-fixed-float
vdb-va-colors-vararg-float
vdb-va-colors-fixed-int
vdb-va-colors-vararg-int
These are the default colors for the various kinds of arguments when being printed.
Values lower than vdb-va-int-limit will always be treated as int.
The minimal number of characters to be considered an ascii string when encountering a pointer is vdb-va-min-ascii
When the absolute value of the binary exponent exceeds vdb-va-max-exponent the double is considered invalid
For the parameters passed on the stack, at most vdb-va-max-overflow-int or vdb-va-max-overflow-vector will ever be
considered.


