droption DynamoRIO Extension provides easy-to-use option declaration and parsing for both clients and standalone programs.
droption with your client simply include this line in your client's
That will automatically set up the include path. Then include the header file:
droption with a non-client, for example with a tool frontend or other standalone application, simply include the droption.h header file.
Simply declare a global instance of
droption_t of the desired option value type for each option you wish to support. Typical value types are
bool, integers, or
std::string. For example:
Then, ask for the
droption_t instances to be filled in from the passed-in arguments from the user. In a client using
dr_client_main(), or from a standalone application, invoke parse_argv():
A standalone application should pass
DROPTION_SCOPE_FRONTEND rather than
A boolean option
foo can be negated on the command line using any of the following prefixes:
Option values are retrieved with
The value set on the command line can be overridden with the
droption only supports the following standard value types for options:
- long long
- unsigned int
- unsigned long
- unsigned long long
droption also provides some custom value types for options:
- bytesize_t: this class provides an integer type that accepts suffixes like 'K', 'M', and 'G' when specifying sizes in units of bytes.
- twostring_t: built-in support for a pair of strings as values.
To produced automated documentation with the long-format descriptions, we recommend building a small program that looks something like this:
This program can be built and run at documentation generation time to produce HTML that can then be embedded into Doxygen or other documentation.
To support multiple strings to trigger the same option, pass a vector of strings as the name, with the primary name (the one used in usage reports) listed first, like this:
For options that accumulate values (dynamorio::droption::DROPTION_FLAG_ACCUMULATE), a re-attach with a statically linked client will keep the old value from the prior attach. The
droption_parser_t::clear_values() function can be called from the client on exit or initialization to clear all the values.